如何使用 Rails 3.0.x 配置 Log4r? [英] How to configure Log4r with Rails 3.0.x?

查看:59
本文介绍了如何使用 Rails 3.0.x 配置 Log4r?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试根据这篇文章使用 Rails 3.0.4 配置 log4r:http://www.dansketcher.com/2007/06/16/integrating-log4r-and-ruby-on-rails/

I tried configuring log4r with Rails 3.0.4 based on this article: 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 文件进行日志配置并在运行时初始化的工作代码片段吗?

I have Googled for a Rails 3 integration, but have not found a working solution. Can anyone point me to a working code snippet that will allow log configuration using a YAML file, and initialization at runtime?

作为参考,我将示例 logger.rb 放在 config/initializers 文件夹中,将 log4r.yml 放在 config 目录中.

Just as a reference, I placed the sample logger.rb in the config/initializers folder and the log4r.yml in the config directory.

谢谢

推荐答案

呵呵 ...Log4r 的想法来自著名的Log4j",它是我 Java 编程生涯中最喜欢的记录器.但是log4r的文档真的很差,对新手来说真的很难.让我展示我的解决方案:

Hehe ...The idea of Log4r comes from the famous "Log4j", which is my favorite logger in my java programming life. However log4r's doc is really poor, and it's really hard for newbies. Let me show my solution:

第一步.创建 log4r 配置文件:(文件名:config/log4r.yml)

Step1. create the log4r config file: (file name: 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

step2. modify 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 中.

step3. add this line to your Gemfile.

# which is the latest version and support "datefileoutputter"
gem 'log4r', '1.1.9'  

(如果你使用的是 Rails 4+(包括 Rails6),还有 step4:将此文件添加到 config/initializers 文件夹

(if you are using Rails 4+ (including Rails6), there still is step4: add this file to config/initializers folder

# config/initializers/log4r_patch_for_rails4.rb
class Log4r::Logger
  def formatter()       # for rails4+
    Proc.new{|severity, time, progname, msg|
      formatted_severity = sprintf("%-5s",severity.to_s)
      formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")
      "[#{formatted_severity} #{formatted_time} #{$$}]\n #{msg}\n"
    }

  end
  def formatter= temp   # for rails6+
  end
end  

)

完成了.现在cd"进入您的 Rails 应用程序文件夹,运行bundle"安装 log4r,然后安装rails s",您将在/log"中找到日志文件.像这样的文件夹:

It's done. Now "cd" into your Rails application folder, run "bundle" to install log4r, then "rails s", you will find the log files in "/log" folder like this:

May  9 17:05 rails_2011-05-09.log
May 10 13:42 rails_2011-05-10.log

日志内容是(我最喜欢的格式):

and the log content is( my favorite format ) :

$ 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

我的环境:

  1. 操作系统:在 XP 中运行的 cygwin
  2. ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
  3. 导轨:3.0.5
  4. 宝石:1.6.0

有任何问题请告诉我~:-)

Any question please let me know~ :-)

参考:https://stackoverflow.com/a/20154414/445908,和 rails6 log4r tagged_logging.rb:22:in `call': 参数个数错误

这篇关于如何使用 Rails 3.0.x 配置 Log4r?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆