gpt4 book ai didi

logging - Groovy 脚本和 log4j

转载 作者:行者123 更新时间:2023-12-02 04:12:17 36 4
gpt4 key购买 nike

一直在到处寻找 log4j 在 Groovy 脚本中记录到文件的工作示例。

没有明确的类(它只是一个脚本)。没有 chalice 。不是为了安慰...而是为了归档。

只是一个带有 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"
}

最佳答案

这是一个简单的示例,使用 @Grab 提取 log4j 库,然后使用内置 Groovy 的 @Log4j 注释连接到日志变量。

然后,您可以在脚本中配置记录器并添加 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 中,因此 DSL 无法解释 log4j 内容。不过看看ConfigSlurper在 Groovy 中,看起来它会为您提供类似的 DSL 来引入您的配置。

关于logging - Groovy 脚本和 log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868180/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com