Настройте 2 файла журнала с log4r - PullRequest
1 голос
/ 03 января 2012

Я добавил log4r в свой проект Rails 2.3.8. Я хочу создать 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).

Есть ли простой способ иметь 2 файла журнала через один экземпляр log4r?

1 Ответ

1 голос
/ 09 января 2012

Я заметил, что ваш файл "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"))
...