我想在Sinatra 1.3.1应用程序中使用带有日志级别信息,警告和错误的log4r。输出应该发送到requests.log(http请求),error.log和sinatra.log(其他输出)。
我该如何配置它?
我花了很多时间在谷歌搜索相关文章,但没有找到任何东西。感谢帮助...
答案 0 :(得分:2)
编写一个替换env['rack.errors']
和env['rack.logger']
的中间件。
答案 1 :(得分:0)
我认为您正在使用经典的sinatra。 (只有1个名为app.rb的文件,您可以使用$ ruby app.rb
运行它)
在app.rb
中:
require 'sinatra'
# load the lib/logger_tool.rb
Dir[File.join(__dir__, 'lib', '*.rb')].each { |file| require file }
# define the logger as global variable.
$logger = LoggerTool.get_logger log_file_postfix: ENV['market_id'],
name: Sinatra::Application.environment.to_s
get '/' do
$logger.info "-- in hihihi"
'hihihi'
end
在lib/logger_file.rb
require 'log4r'
require 'log4r/yamlconfigurator'
require 'log4r/outputter/datefileoutputter'
class LoggerTool
include Log4r
def self.get_logger options
log4r_config= YAML.load_file(File.join(File.dirname(__FILE__), '..', "config", "log4r.yml"))
temp = log4r_config['log4r_config']
# change the log filename to xx.log (must end with .log)
# this is optional
temp["outputters"][0]['filename'] = "my_log_#{options[:log_file_postfix]}.log"
# in test environment, let's rename it as "test.log"
if options[:name] == 'test'
temp["outputters"][0]['filename'] = "test"
end
YamlConfigurator.decode_yaml(temp)
return Log4r::Logger[options[:name]]
end
end
在config/log4r.yml
log4r_config:
# define all loggers ...
loggers:
- name : production
level : WARN
trace : 'false'
outputters :
- datefile
- name : development
level : DEBUG
trace : 'true'
outputters :
- datefile
- name : test
level : DEBUG
trace : 'true'
outputters :
- datefile
outputters:
- type: DateFileOutputter
name: datefile
dirname: "log"
#filename: "my_app.log" # here we comment it out.
formatter:
date_pattern: '%H:%M:%S'
pattern : '%d %l: %m '
type : PatternFormatter
$ ruby app.rb
运行sinatra并访问http://localhost:4567/
,您将在log
文件夹中找到一个新创建的日志文件。
log/my_log_xx_2019_03_27.log