#ruby #logging #sinatra #log4r
#ruby #ведение журнала #sinatra #log4r
Вопрос:
Я хочу использовать log4r с информацией об уровнях регистрации, предупреждением и ошибкой в приложении Sinatra 1.3.1. Выходные данные должны поступать в requests.log (http-запросы), error.log и sinatra.log (другие выходные данные).
Как мне его настроить?
Я только что потратил много времени на поиск в Google связанных статей, но ничего не нашел. Помощь приветствуется…
Ответ №1:
Напишите промежуточное программное обеспечение, которое заменяет env['rack.errors']
и env['rack.logger']
.
Комментарии:
1. Да, спасибо. Я признаю, что задаю свой вопрос из лени. Я прочитал, как это делается, и думаю, что теперь я могу сделать это сам.
Ответ №2:
Я предполагаю, что вы используете классическую 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
-
запустите sinatra через
$ ruby app.rb
и посетитеhttp://localhost:4567/
, вы найдете в своейlog
папке недавно созданный файл журнала.log/my_log_xx_2019_03_27.log