如何使用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
由于
答案 0 :(得分:0)
我注意到你有:
“类路径:$ {APPNAME} -config.properties”,
“类路径:$ {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"]
}