1

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

  1. 用于应用程序登录(INFO 消息)(application.log)
  2. 错误消息(信息消息以外的任何消息)(errors.log)

以下是每个记录器的 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 个日志文件的简单方法?

4

1 回答 1

1

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

loggers:
  - name      : mylogger
    level     : DEBUG

也许你希望它是“警告”?

loggers:
  - name      : mylogger
    level     : WARN

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

h = YAML.load(File.open("config/error_config.yml"))
error_config = YAML.load(File.open("config/error_config.yml"))
于 2012-01-08T23:37:54.780 回答