簡體   English   中英

無法使用Grails外部屬性文件配置log4j

[英]Unable to configure log4j using Grails external Properties file

如何使用Grails外部屬性文件配置log4j?

在config.groovy中:

grails.config.locations = [  
    "classpath:${appName}-config.properties",  
    "classpath:${appName}-config.groovy",  
    "file:${userHome}/.grails/${appName}-config.properties",  
    "file:${userHome}/.grails/${appName}-config.groovy"  
]

在$ {appName} -config.properties中:

log4j.rootLogger=ERROR, FA  
log4j.appender.FA=org.apache.log4j.FileAppender  
log4j.appender.FA.File=c:/logs/mylog.log  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n  

沒有創建任何輸出文件,並且以下內容輸出到控制台:

log4j:錯誤警告:配置log4j日志記錄時發生異常:無此類屬性:類的委托:java.lang.String

謝謝

我注意到您有:

“ classpath:$ {appName} -config.properties”,
“ classpath:$ {appName} -config.groovy”,
“文件:$ {userHome} /。grails / $ {appName} -config.properties”,
“文件:$ {userHome} /。grails / $ {appName} -config.groovy”

這可能會導致多余的屬性聲明,從而導致問題。 我會嘗試刪除聲明的前兩個類路徑文件,而只保留一個屬性文件。 我通常會按(DEV,TEST,PROD)之類的環境來分隔屬性文件,您可能只需要一個DEV,但是有一天您可能想要一個PROD環境。 另外,您還需要確保您的log4j配置正確設置並且足夠簡單,只需花很少的時間就可以使用Grails在create-app命令中提供的功能。

Config.groovy:

 environments {
        development {
           appName = "application"
           logDirectory = "/where/to/keep/local/logs/"
          }
    production {
            appName = "application"
            configDir ="/path/to/prod/app/cfg/"
             //Make sure logDirectory is defined in your properties file
            grails.config.locations = ["file:${configDir}${appName}-config.properties"]
        }
    }

// log4j configuration
log4j = {
    println "Log Directory: ${logDirectory}"
    def logPrefix = "applicationName"

    appenders {
        console name:'stdout', layout:pattern(conversionPattern: '%c{2} - %X{userName} - %m%n')

        appender new DailyRollingFileAppender(
            name: 'stacktrace',
            datePattern: "'.'yyyy-MM-dd",
            fileName: "${logDirectory}/${logPrefix}Stacktrace.log",
            layout: pattern(conversionPattern:'%d [%t] %-5p %c{2} %x - %X{userName} - %m%n')
            )

        appender new DailyRollingFileAppender(
            name: 'logAppender',
            datePattern: "'.'yyyy-MM-dd",
            fileName: "${logDirectory}/${logPrefix}.log",
            layout: pattern(conversionPattern:'%d [%t] %-5p %c{2} %x - %X{userName} - %m%n')
        )

        appender new DailyRollingFileAppender(
            name: 'DebugLog',
            datePattern: "'.'yyyy-MM-dd",
            fileName: "${logDirectory}/${logPrefix}Debug.log",
            layout: pattern(conversionPattern:'%d{dd MMM yyyy HH:mm:ss} [%X{userName}] %c{2} %m%n')
        )
   }
}

另外在側面說明中,我看到您將屬性保留在.grails目錄下,我個人不會這樣做。 如果要將其保留在應用程序中,則可以創建application / grails-app / cfg /目錄,然后訪問該文件將類似於以下內容:

 production {
                appName = "application"
                 //Make sure logDirectory is defined in your properties file
                grails.config.locations = ["file:../cfg/${appName}-config.properties"]
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM