如何使用Rails 3.0.x配置Log4r?

问题描述

| 我尝试根据这篇文章使用Rails 3.0.4配置log4r: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目录中。 谢谢     

解决方法

呵呵... 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
第三步。将此行添加到您的Gemfile中。
# which is the latest version and support \"datefileoutputter\"
gem \'log4r\',\'1.1.9\'  
(如果您使用的是Rails 4+,则还有步骤4:将此文件添加到config / initializers文件夹中
# 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
我的环境: 操作系统:XP中运行的cygwin 红宝石1.8.7(2011-02-18补丁程序334)[i386-mingw32] 导轨:3.0.5 宝石:1.6.0 有什么问题请让我知道〜:-) 请参阅:https://stackoverflow.com/a/20154414/445908     ,为了模拟Rails的记录行为(登录到环境Dependend日志文件),我使用以下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文件进行配置,以及在运行时进行初始化? 我写了一篇详细的博客文章,内容涉及如何以替代标准Rails logger的方式设置log4r。此外,我详细介绍了如何使用多个记录器,使用日志级别以及如何使用Log4r记录Mongoid,ActiveRecord和Exceptions(包括堆栈跟踪)。 在与该文章相对应的HackerNews线程的注释中,提出了另一个显然更成熟的宝石,称为“ Logging”,因此对Log4r感兴趣的人也可能希望对此宝石进行检查。