我到处寻找在Groovy脚本中将log4j日志记录到文件中的工作示例。
没有显式的类(它只是一个脚本)。没有圣杯。而不是console...to文件。
这只是log4j的一个普通的groovy脚本。
在这方面,log4j是最好的(groovy),还是其他的日志库更好?
有没有人可以给我举个例子或者演示一下如何做到这一点?我设法把它放到了控制台上,但没有把它放到文件里。
如果log4j配置也在config.groovy文件中,那就更好了,因为我正在使用配置文件来做其他事情。
更新
多亏了neversleepz示例,我可以很好地使用以下代码:
config.groovy文件:
log4j {
appender.stdout = "org.apache.log4j.ConsoleAppender"
appender."stdout.layout"="org.apache.log4j.PatternLayout"
appender.scrlog = "org.apache.log4j.FileAppender"
appender."scrlog.layout"="org.apache.log4j.PatternLayout"
appender."scrlog.layout.ConversionPattern"="%d %5p %c{1}:%L - %m%n"
appender."scrlog.file"="rootscript.log"
rootLogger = "debug,scrlog,stdout"
}
还有我的脚本:
import org.apache.log4j.*
import groovy.util.logging.*
def config = new ConfigSlurper().parse(new File('config.groovy').toURL())
PropertyConfigurator.configure(config.toProperties())
Logger log = Logger.getInstance(getClass())
// Need to set log level as described here:
// http://groovy.329449.n5.nabble.com/log4j-annotation-not-working-td4368806.html
log.level = Level.INFO
// this will NOT print/write as the loglevel is info
log.debug 'Executing Script.'
// this will print
log.info 'Simple sample to show log INFO field is injected.'
log.warn 'Simple sample to show log WARN field is injected.'
log.error 'Simple sample to show log ERR field is injected.'
谢谢你这么做!
我还配置了一个RollingFileAppender,DailyRollingFileAppender我也会把它们放在这里:
log4j {
//
appender.stdout = "org.apache.log4j.ConsoleAppender"
appender."stdout.layout"="org.apache.log4j.PatternLayout"
//
appender.scrlog = "org.apache.log4j.DailyRollingFileAppender"
appender."scrlog.DatePattern"="'.'yyyy-MM-dd"
appender."scrlog.Append"="true"
appender."scrlog.File"="rootscript.log"
appender."scrlog.layout"="org.apache.log4j.PatternLayout"
appender."scrlog.layout.ConversionPattern"="%d %5p %c{1}:%L - %m%n"
rootLogger="debug,scrlog,stdout"
}
和
log4j {
//
appender.stdout = "org.apache.log4j.ConsoleAppender"
appender."stdout.layout"="org.apache.log4j.PatternLayout"
//
appender.scrlog = "org.apache.log4j.DailyRollingFileAppender"
appender."scrlog.DatePattern"="'.'yyyy-MM-dd"
appender."scrlog.Append"="true"
appender."scrlog.File"="rootscript.log"
appender."scrlog.layout"="org.apache.log4j.PatternLayout"
appender."scrlog.layout.ConversionPattern"="%d %5p %c{1}:%L - %m%n"
rootLogger="debug,scrlog,stdout"
logger.ProcessLogger="debug,scrlog"
}
发布于 2013-11-09 10:06:16
下面是一个简单的示例,使用@Grab
引入Groovy库,然后使用内置的log4j的@Log4j
注释连接到log
变量。
然后,可以在脚本中配置记录器并添加FileAppender
@Grab('log4j:log4j:1.2.17')
import org.apache.log4j.*
import groovy.util.logging.*
@Log4j
class HelloWorld{
def execute() {
// Need to set log level as described here:
// http://groovy.329449.n5.nabble.com/log4j-annotation-not-working-td4368806.html
log.level = Level.INFO
// add an appender to log to file
log.addAppender(new FileAppender(new TTCCLayout(), 'myscript.log'));
// this will NOT print/write as the loglevel is info
log.debug 'Execute HelloWorld.'
// this will print
log.info 'Simple sample to show log field is injected.'
}
}
def helloWorld = new HelloWorld()
helloWorld.execute()
运行时,您将在myscript.log中看到以下内容
11 [main] INFO HelloWorld - Simple sample to show log field is injected.
不幸的是,config.groovy文件记录器配置为specific to Grails。因为您不是在Grails中,所以领域特定语言并不是用来解释log4j内容的。但是,看看Groovy中的ConfigSlurper,看起来它将为您提供一个类似的DSL来引入您的配置。
发布于 2013-11-09 15:44:57
另一种方法是使用Groovy的日志记录包。通过导入util日志并使用@Log注解,您可以轻松地使用相同的方法,如本例所示
import groovy.util.logging.*
@Log
class Test{
public class() {
log.debug "Logging"
}
}
但是,由于注释适用于类,因此您需要在类中创建groovy脚本。自由格式脚本不能以这种方式访问记录器。
希望这能有所帮助。
https://stackoverflow.com/questions/19868180
复制相似问题