使用log4r设置2个日志文件

时间:2012-01-03 09:26:30

标签: ruby-on-rails logging log4r

我在我的Rails 2.3.8项目中添加了log4r。我想创建2个日志文件。

  1. 用于应用程序登录(INFO消息)(application.log)
  2. 错误消息(除信息消息以外的任何消息)(errors.log)
  3. 以下是每个记录器的yml配置文件

    error_config.yml (errors.log)
    
    # *** YAML2LOG4R ***
    error_config:
      # define all pre config ...
      pre_config:
        custom_levels:
          - DEBUG
          - INF
          - PRT
          - WRN
          - ERR
          - FAT
        global:
          level: DEBUG
        root  :
          level: DEBUG
        parameters:
          - name   : x
            value  : aaa
          - name   : y
            value  : bbb
    
      # define all loggers ...
      loggers:
        - name      : mylogger
          level     : DEBUG
          additive  : 'false'
          trace     : 'false'
          outputters:
            - stderr
            - logfile
    
      # define all outputters (incl. formatters)
      outputters:
        - type     : StderrOutputter
          name     : stderr 
          level    : DEBUG
          only_at  :
            - INF
            - WRN
            - FAT
          formatter:
            date_pattern: '%y%m%d %H:%M:%S'
            pattern     : '%d %l: %m '
            type        : PatternFormatter
    
        - type        : DateFileOutputter
          name        : logfile
          level       : DEBUG
          date_pattern: '%Y%m%d'
          trunc       : 'false'
          dirname     : "/home/sameera/workspace/project/log"
          filename    : "errors.log"
          formatter   :
            date_pattern: '%m/%d/%Y %H:%M:%S'
            pattern     : '%d %l - %m'
            type        : PatternFormatter
    

    application_config.yml (application.log)
    
    # *** YAML2LOG4R ***
    application_config:
      # define all pre config ...
      pre_config:
        custom_levels:
          - DEBUG
          - INF
          - PRT
          - WRN
          - ERR
          - FAT
        global:
          level: DEBUG
        root  :
          level: DEBUG
        parameters:
          - name   : x
            value  : aaa
          - name   : y
            value  : bbb
    
      # define all loggers ...
      loggers:
        - name      : application
          level     : DEBUG
          additive  : 'false'
          trace     : 'false'
          outputters:
            - stderr
            - logfile
    
      # define all outputters (incl. formatters)
      outputters:
        - type     : StderrOutputter
          name     : stderr 
          level    : DEBUG
          only_at  :
            - INF
            - WRN
            - FAT
          formatter:
            date_pattern: '%y%m%d %H:%M:%S'
            pattern     : '%d %l: %m '
            type        : PatternFormatter
    
        - type        : DateFileOutputter
          name        : application
          level       : DEBUG
          date_pattern: '%Y%m%d'
          trunc       : 'false'
          dirname     : "/home/sameera/workspace/project/log"
          filename    : "application.log"
          formatter   :
            date_pattern: '%m/%d/%Y %H:%M:%S'
            pattern     : '%d %l - %m'
            type        : PatternFormatter
    

    以下是初始化两个记录器的代码

    h = YAML.load(File.open("config/error_config.yml"))
    app_log = YAML.load(File.open("config/application_config.yml"))
    
    log_cfg = YamlConfigurator
    log_cfg['TEST'] = 'foobar'
    log_cfg.decode_yaml h['error_config']
    
    
    
    applog_cfg = YamlConfigurator
    applog_cfg['TEST'] = 'foobar'
    applog_cfg.decode_yaml app_log['application_config']
    
    
    $ERRORLOG = Log4r::Logger['error_config']
    $APPLICATION = Log4r::Logger['application_config']
    
    
    $ERRORLOG.debug "info message"
    $APPLICATION.debug "info message"
    

    此代码工作正常,但它会在errors.log中打印这两个消息(我希望在application.log上打印第二条消息)。

    是否有通过一个log4r实例拥有2个日志文件的简单方法?

1 个答案:

答案 0 :(得分:1)

我注意到你的“error_config.yml”文件将输出级别定义为“debug”。

loggers:
  - name      : mylogger
    level     : DEBUG

也许你想让它成为“警告”?

loggers:
  - name      : mylogger
    level     : WARN

P.S。 ^ _ ^命名对流很重要。请对您的代码的读者友好。 (通常是你自己)。哪个更清楚?

h = YAML.load(File.open("config/error_config.yml"))
error_config = YAML.load(File.open("config/error_config.yml"))