Newer
Older
Logging::Rails.configure do |config|
# Configure the Logging framework with the default log levels
Logging.init %w(debug info warn error fatal)
# Objects will be converted to strings using the :inspect method.
Logging.format_as :inspect
# The default layout used by the appenders.
pattern = "[%d] %-5l PID-%p TID-%t %c: %m\n"
layout = Logging.layouts.pattern(pattern: pattern)
# Setup a color scheme called 'bright' than can be used to add color codes
# to the pattern layout. Color schemes should only be used with appenders
# that write to STDOUT or STDERR; inserting terminal color codes into a file
# is generally considered bad form.
Logging.color_scheme("bright",
levels: {
info: :green,
warn: :yellow,
error: :red,
fatal: %i(white on_red)
},
date: :blue,
logger: :cyan,
message: :magenta
)
# Configure an appender that will write log events to STDOUT. A colorized
# pattern layout is used to format the log events into strings before
# writing.
Logging.appenders.stdout("stdout",
auto_flushing: true,
layout: Logging.layouts.pattern(
color_scheme: "bright"
)
) if config.log_to.include? "stdout"
if config.log_to.include? "file"
# Configure an appender that will write log events to a file.
if AppConfig.environment.logging.logrotate.enable?
# The file will be rolled on a daily basis, and the rolled files will be kept
# the configured number of days. Older files will be deleted. The default pattern
# layout is used when formatting log events into strings.
Logging.appenders.rolling_file("file",
filename: config.paths["log"].first,
keep: AppConfig.environment.logging.logrotate.days.to_i,
age: "daily",
truncate: false,
auto_flushing: true,
layout: layout
)
else
# No file rolling, use logrotate to roll the logfile.
Logging.appenders.file("file",
filename: config.paths["log"].first,
truncate: false,
auto_flushing: true,
layout: layout
)
end
end
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# Setup the root logger with the Rails log level and the desired set of
# appenders. The list of appenders to use should be set in the environment
# specific configuration file.
#
# For example, in a production application you would not want to log to
# STDOUT, but you would want to send an email for "error" and "fatal"
# messages:
#
# => config/environments/production.rb
#
# config.log_to = %w[file email]
#
# In development you would want to log to STDOUT and possibly to a file:
#
# => config/environments/development.rb
#
# config.log_to = %w[stdout file]
#
Logging.logger.root.level = config.log_level
Logging.logger.root.appenders = config.log_to unless config.log_to.empty?
# Under Phusion Passenger smart spawning, we need to reopen all IO streams
# after workers have forked.
#
# The rolling file appender uses shared file locks to ensure that only one
# process will roll the log file. Each process writing to the file must have
# its own open file descriptor for `flock` to function properly. Reopening
# the file descriptors after forking ensures that each worker has a unique
# file descriptor.
if defined? PhusionPassenger
PhusionPassenger.on_event(:starting_worker_process) do |forked|
Logging.reopen if forked
end
end
end