我写的是需要做一些记录一个简单的Groovy应用程序。 的事情是如何记录的实际性能将取决于具体的环境。 例如,在开发我只是想登录到控制台,在测试和生产我可能需要编写一个文件,并在生产中我可能要发送电子邮件的最严重的事件。
现在我在做什么看起来像这样:
import org.apache.log4j.Logger
import org.apache.log4j.PropertyConfigurator
class BaseClass {
protected config
static Logger logger = Logger.getLogger(BaseClient.class)
def BaseClass(env) {
def configFilePath = // whatever
config = new JsonSlurper().parseText(configFile.text)[options.env]
def logConfigFilePath = ['somelogdir', config.log_file].join(File.separator)
PropertyConfigurator.configure(logConfigFilePath)
}
}
然后我所有的类,需要从做记录继承BaseClass
。
这样一来,我可以指定每个环境不同的文件名,我可以从那里读取记录configuratio。 但似乎很多的样板,并迫使我使用可能不是很理想的层次结构。
在另一方面, 在这里我看到,我能获得一个记录器,带有一个简单的注解。
有没有办法根据环境来获得不同的采伐 - 这可以在运行时设置?
在tim_yates的答案的基础上,使用常规文件来配置log4j。 例如:
// log4j.groovy
log4j {
rootLogger="DEBUG, A1"
appender.A1 = "org.apache.log4j.ConsoleAppender"
appender.'A1.layout' = "org.apache.log4j.PatternLayout"
if (System.properties['env'] == 'prod') {
appender.'A1.layout.ConversionPattern'="prod %-4r [%t] %-5p %c %x - %m%n"
} else {
appender.'A1.layout.ConversionPattern'="dev %-4r [%t] %-5p %c %x - %m%n"
}
}
然后,让你的脚本中使用它:
@GrabConfig(systemClassLoader=true)
@Grab(group='log4j', module='log4j', version='1.2.17')
import groovy.util.logging.Log4j
import org.apache.log4j.PropertyConfigurator
@Log4j
class Test {
def dosome() {
log.info('Logging!')
}
static main( args ) {
def config = new ConfigSlurper().parse(new File('log4j.groovy').toURL())
PropertyConfigurator.configure(config.toProperties())
new Test().dosome()
}
}
最后,在系统属性中的环境中启动程序:
groovy -Denv=prod Test.groovy
你应该能够简单地把一个log4j.properties
文件在类路径中。
鉴于这种测试脚本:
@groovy.util.logging.Log4j
class Test {
def dosome() {
log.info( 'Logging!' )
}
static main( args ) {
new Test().dosome()
}
}
如果我在命令行中运行它:
groovy -cp log4j-1.2.17.jar Test.groovy
因为它没有设置默认登录INFO消息不显示任何信息。
但是,如果我写了log4j.properties文件( 从文档的log4j的拍摄和修改登录):
log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
然后在classpath这个属性文件再次运行它:
groovy -cp log4j.properties:log4j-1.2.17.jar Test.groovy
我们得到:
2012-07-16 16:08:47,524 [main] INFO Test - Logging!