2013-12-24 49 views
2

我在grails 2.3.4中使用slf4j「DailyRollingFileAppender」。grails中的log4j:在appender配置文件中使用變量時顯示錯誤

當我試圖使用一個變量作爲「文件」參數的一部分時,grails總是在應用程序啓動時打印一些錯誤日誌。

但我的應用程序的日誌消息可以按照預期打印到指定的「user-event.log」,儘管grails給了我那些錯誤消息。

下面是我log4j配置:

log4j = { 
    // Example of changing the log pattern for the default console appender: 
    appenders { 
     console name: 'stdout', layout: pattern(conversionPattern: '%c{2} %m%n') 
     appender new DailyRollingFileAppender(
       name: "userEventLog", 
       file: "${event.log.dir}/user-event.log", 
       layout: pattern(conversionPattern: '%m%n'), 
       datePattern: "'.'yyyy_MM_dd", 
       threshold: org.apache.log4j.Level.INFO 
     ) 
    } 

    info userEventLog: "app.bean.log.UserEventLog" 
} 

的 「event.log.dir」 變量的定義如下:

environments { 
    development { 
     // event log dir 
     event.log.dir = "${userHome}/workspace/app/logs/event" 
    } 
    production { 
     // event log dir 
     event.log.dir = "/opt/www/app/logs/event" 
    } 
} 

在控制檯的grails打印的錯誤消息時,應用程序的起始是:

| Error log4j:ERROR Property missing when configuring log4j: event 
| Error log4j:ERROR Property missing when configuring log4j: event 

當我用一個字符串路徑替換「$ {event.log.dir}」變量,例如「/ home/app /「並重新啓動grails,錯誤消息消失。

回答

5

使用Holders來讀取配置屬性。我假設它在設置log4j時不能讀取配置屬性本身,因爲它是配置本身的一部分。

import grails.util.Holders 

... 

log4j = { 
// Example of changing the log pattern for the default console appender: 
    appenders { 
     console name: 'stdout', layout: pattern(conversionPattern: '%c{2} %m%n') 
     appender new DailyRollingFileAppender(
      name: "userEventLog", 
      file: "${Holders.config.event.log.dir}/user-event.log", 
      layout: pattern(conversionPattern: '%m%n'), 
      datePattern: "'.'yyyy_MM_dd", 
      threshold: org.apache.log4j.Level.INFO 
     ) 
    } 

    info userEventLog: "app.bean.log.UserEventLog" 
} 
+0

嗨dmahapatro,非常感謝。你的回答是正確的:),當我使用$ {Holders.config.event.log.dir}時,錯誤消失 –