在Logatra App中使用Log4r作为记录器

问题描述 投票:1回答:2

我想在Sinatra 1.3.1应用程序中使用带有日志级别信息,警告和错误的log4r。输出应该发送到requests.log(http请求),error.log和sinatra.log(其他输出)。

我该如何配置它?

我花了很多时间在谷歌搜索相关文章,但没有找到任何东西。感谢帮助......

ruby logging sinatra log4r
2个回答
2
投票

编写一个替换env['rack.errors']env['rack.logger']的中间件。


0
投票

我假设你使用的是经典的sinatra。 (只有1个文件名为app.rb,你用$ ruby app.rb运行它)

  1. app.rbrequire '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
  2. 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
  3. 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
  4. 通过$ ruby app.rb运行sinatra并访问http://localhost:4567/,你会在你的log文件夹中找到一个新创建的日志文件。 log/my_log_xx_2019_03_27.log
© www.soinside.com 2019 - 2024. All rights reserved.