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 に両方のメッセージを出力します (2 番目のメッセージを application.log に出力したいので)。

1 つの log4r インスタンスを介して 2 つのログ ファイルを持つ簡単な方法はありますか?

4

1 に答える 1

1

「error_config.yml」ファイルが出力レベルを「debug」として定義していることに気付きました。

loggers:
  - name      : mylogger
    level     : DEBUG

多分あなたはそれを「WARN」にしたいですか?

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 に答える