我们知道,默认情况下,Grails 3.0中的日志记录由Logback日志框架处理,并且可以使用 grails-app / conf / logback.groovy 文件进行配置。这样做的好处是该文件中的配置适用于Logback和Log4j实现(已在Grails 3.1.2中成功测试)。从Grails 3.1.2迁移到使用Grails 3.2.8(如我之前所说)之后,Log4j似乎没有使用logback.groovy文件中的配置,因此应该以其他方式进行配置-在运行时。
我对此进行了深入研究,以确保这确实是现在配置的方式,并且似乎如果我使用的是默认Log4j日志记录:
org.apache.log4j.Logger.getLogger("name").info("TEST");
根本不工作。要将信息填充到输出日志文件中,我应该使用默认的SLF4J API:
org.slf4j.LoggerFactory.getLogger("name").info("TEST");
这里的问题是因为我们在代码中有很多地方可以使用Log4j方法实现日志记录,而现在-日志文件中没有任何内容。
所以我在这里有两个问题。第一个-这是Grails实现此行为的确切方法(因为官方文档Grails 3.2.8 Documentation中未提及)。第二个-XML或RUNTIME配置是配置Log4j的最佳方法,因此请像以前一样使用它。如果是,这里的坏事是我们应该一次维护两个相同的配置。还有其他方法可以将Log4j配置为使用与Grails Logger相同的配置。
附言不需要发布任何代码,因为所有都是默认配置。
非常感谢!
最佳答案
appender('STDOUT', ConsoleAppender) {
encoder(PatternLayoutEncoder) {
charset = Charset.forName('UTF-8')
}
}
root(ERROR, ['STDOUT'])
logger("<package_name>", DEBUG)
List artifacts = ["conf", "controllers", "domain", "init"]
artifacts.each { artifact ->
logger("grails.app.${artifact}.<package_name>", DEBUG)
}
编写完之后,您可以在上面提到的任何 Artifact 中添加记录器以进行调试,例如:
log.debug "Any Message"
欲了解更多设置,请点击这里:https://logback.qos.ch/manual/groovy.html