2012-01-03 36 views
1

我在Rails 2.3.8項目中添加了log4r。我想創建2個日誌文件。使用log4r設置2個日誌文件

  1. 對於應用程序登錄(INFO消息)(application.log)
  2. 錯誤訊息(信息消息以外的任何消息)(errors.log)

以下是我對每個陽明配置文件記錄

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

我注意到你的「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")) 
相關問題