Logging Groovy脚本和log4j

Logging Groovy脚本和log4j,logging,groovy,Logging,Groovy,在Groovy脚本中到处搜索log4j日志记录到文件的工作示例 没有显式类(它只是一个脚本)。 没有圣杯。 不是控制台…是文件 只是一个带有log4j的普通groovy脚本 log4j最适合这个(groovy)还是其他日志库更好 有人能给我举个例子或演示一下这是如何做到的吗?我设法把它送到了控制台,但没有归档 如果log4j配置也在config.groovy文件中,那就太好了,因为我正在为其他事情使用配置文件 更新 多亏了neversleepz示例,我的以下功能运行良好: config.groo

在Groovy脚本中到处搜索log4j日志记录到文件的工作示例

没有显式类(它只是一个脚本)。 没有圣杯。 不是控制台…是文件

只是一个带有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进行了配置,DailRollingFileAppender我也会将它们放在这里:

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"
}


下面是一个简单的示例,使用
@Grab
拉入log4j库,然后使用内置Groovy的
@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文件记录器配置不正确。因为您不在Grails中,所以DSL不是用来解释log4j的。不过,看看Groovy,它似乎会为您提供一个类似的DSL来引入配置。

另一种方法是使用Groovy的日志记录包。您可以像在本例中一样轻松地使用相同的方法导入util日志和使用@Log注释

import groovy.util.logging.*

@Log
class Test{
    public class() {
        log.debug "Logging"
    }
}
但是,由于注释在类上工作,因此需要在类内创建groovy脚本。自由格式脚本不能以这种方式访问记录器


希望这有帮助。

具体问题是什么?在最坏的情况下,您应该能够像任何其他Java项目一样配置日志记录。看到了,非常感谢!如果您想做更多的事情:p,我很乐意看到一个在配置中使用环境的示例…我很乐意。由于log4jconfig.groovy只是groovy代码,因此可以添加if语句,根据不同的系统属性更改配置。原来这个问题已经被问到并回答了,所以请查看更多信息。警告:这映射到java.util.logging,而不是log4j:
import groovy.util.logging.*

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