首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Groovy脚本和log4j

Groovy脚本和log4j
EN

Stack Overflow用户
提问于 2013-11-09 04:44:07
回答 2查看 31.1K关注 0票数 20

我到处寻找在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"
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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来引入您的配置。

票数 12
EN

Stack Overflow用户

发布于 2013-11-09 15:44:57

另一种方法是使用Groovy的日志记录包。通过导入util日志并使用@Log注解,您可以轻松地使用相同的方法,如本例所示

import groovy.util.logging.*

@Log
class Test{
    public class() {
        log.debug "Logging"
    }
}

但是,由于注释适用于类,因此您需要在类中创建groovy脚本。自由格式脚本不能以这种方式访问记录器。

希望这能有所帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19868180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档