Как настроить Log4r с Rails 3.0.x?
Я попытался настроить log4r с Rails 3.0.4 на основе этой статьи: http://www.dansketcher.com/2007/06/16/integrating-log4r-and-ruby-on-rails/
/Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:166:in `sub!': can't convert Pathname into String (TypeError)
from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:166:in `block in paramsub'
from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:165:in `each'
from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:165:in `paramsub'
from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:156:in `block in decode_hash_params'
Я использовал Google для интеграции с Rails 3, но не нашел работающего решения. Может кто-нибудь указать мне рабочий фрагмент кода, который позволит конфигурации журнала с использованием файла YAML и инициализации во время выполнения?
Для справки я поместил образец logger.rb в папку config/initializers, а log4r.yml - в каталог config.
Спасибо
3 ответа
Хе-хе... Идея Log4r происходит от знаменитого "Log4j", который является моим любимым регистратором в моей жизни Java-программирования. Однако документ log4r действительно плох, и это действительно трудно для новичков. Позвольте мне показать мое решение:
Шаг 1. создайте файл конфигурации log4r: (имя файла: 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
# define all outputters (incl. formatters)
outputters:
- type: DateFileOutputter
name: datefile
dirname: "log"
# notice the file extension is needed!
# if you want the file is named by the process, just comment it,
# then it will automatically get the same name with its process,
# e.g. rails_2017-05-03.log
filename: "my_app.log"
formatter:
date_pattern: '%H:%M:%S'
pattern : '%d %l: %m '
type : PatternFormatter
шаг 2. изменить config/application.rb
require 'rails/all'
# add these line for log4r
require 'log4r'
require 'log4r/yamlconfigurator'
require 'log4r/outputter/datefileoutputter'
include Log4r
Bundler.require(:default, Rails.env) if defined?(Bundler)
module Zurich
class Application < Rails::Application
#...
# assign log4r's logger as rails' logger.
log4r_config= YAML.load_file(File.join(File.dirname(__FILE__),"log4r.yml"))
YamlConfigurator.decode_yaml( log4r_config['log4r_config'] )
config.logger = Log4r::Logger[Rails.env]
end
end
шаг 3. добавьте эту строку в ваш Gemfile.
# which is the latest version and support "datefileoutputter"
gem 'log4r', '1.1.9'
(если вы используете Rails 4+, все еще есть шаг 4: добавьте этот файл в папку config/initializer
# config/initializers/log4r_patch_for_rails4.rb
class Log4r::Logger
def formatter()
end
end
)
Это сделано. Теперь "cd" в вашей папке приложения Rails, запустите "bundle" для установки log4r, затем "rails s", вы найдете файлы журнала в папке "/ log", например так:
May 9 17:05 rails_2011-05-09.log
May 10 13:42 rails_2011-05-10.log
и содержание журнала (мой любимый формат):
$ tail log/rails_2011-05-10.log
Started GET "/????_settings/19/edit" for 127.0.0.1 at ...
13:42:11 INFO: Processing by ????SettingsController ...
13:42:11 INFO: Parameters: {"id"=>"19"}
13:42:12 DEBUG: ????Setting Load (0.0ms) SELECT "d ...
13:42:12 INFO: Completed 200 OK in 750ms
Моя среда:
- ОС: Cygwin работает в XP
- ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
- рельсы: 3.0.5
- драгоценный камень: 1.6.0
Любой вопрос, пожалуйста, дайте мне знать ~:-)
обратитесь к: /questions/10468636/rails-4-log4r-serverrb78-v-start-neopredelennyij-metodformatter/10468650#10468650
Чтобы имитировать поведение журналов рельсов (вход в лог-файлы, зависящие от среды), я использую следующий log4r.yml:
log4r_config:
# define all loggers ...
loggers:
- name : production
level : WARN
trace : 'false'
outputters :
- datefile_production
- name : development
level : DEBUG
trace : 'true'
outputters :
- datefile_development
- name : test
level : DEBUG
trace : 'true'
outputters :
- datefile_test
# define all outputters (incl. formatters)
outputters:
- type: DateFileOutputter
name: datefile_production
dirname: "log"
filename: "production.log"
formatter:
date_pattern: '%H:%M:%S'
pattern : '%d %l: %m '
type : PatternFormatter
- type: DateFileOutputter
name: datefile_development
dirname: "log"
filename: "development.log"
formatter:
date_pattern: '%H:%M:%S'
pattern : '%d %l: %m '
type : PatternFormatter
- type: DateFileOutputter
name: datefile_test
dirname: "log"
filename: "test.log"
formatter:
date_pattern: '%H:%M:%S'
pattern : '%d %l: %m '
type : PatternFormatter
Может кто-нибудь указать мне рабочий фрагмент кода, который позволит конфигурации журнала с использованием файла YAML и инициализации во время выполнения?
Я написал подробный пост в блоге о том, как настроить log4r таким образом, чтобы он заменял стандартный логгер рельсов. Кроме того, я подробно рассказал о том, как использовать несколько регистраторов, использовать уровни журналов, а также как регистрировать Mongoid, ActiveRecord и исключения (включая трассировки стека) с использованием Log4r.
В комментариях к ветке HackerNews, соответствующей этой статье, был предложен еще один явно более зрелый гем под названием " Logging ", поэтому люди, заинтересованные в Log4r, могут захотеть проверить и этот гем.