Log4j 已经没有通过 Grails 3.2.8 中的 logback.groovy 文件进行配置



众所周知,默认情况下,Grails 3.0中的日志记录由Logback日志记录框架处理,可以使用grails-app/conf/logback.groovy文件进行配置。这样做的好处是,这个文件中的配置适用于Logback和Log4j实现(在Grails 3.1.2中成功测试)。在我们从Grails 3.1.2迁移到使用Grails 3.2.8之后(正如我之前所说),似乎logback.groovy文件中的配置没有被Log4j使用,它应该以其他方式进行配置 - 在运行时。

我对此进行了深入研究,以确保这确实是现在的配置方式,似乎如果我使用默认的 Log4j 日志记录:

org.apache.log4j.Logger.getLogger("name").info("TEST");

根本不起作用。要使信息填充到输出日志文件中,我应该使用默认的 SLF4J API:

org.slf4j.LoggerFactory.getLogger("name").info("TEST");

这里的问题是因为我们在代码中有很多地方使用 Log4j 方法实现日志记录,现在 - 日志文件中没有写入任何内容。

所以我这里有两个问题。第一个 - 这是Grails实现此行为的确切方式(因为官方文档中没有提到任何内容 - Grails 3.2.8文档)。第二个 - 是XML或运行时配置是配置Log4j的最佳方式,因此请像以前一样使用它。如果是 - 这里的坏事是我们应该一次维护两个相同的配置。有没有其他方法可以将 Log4j 配置为使用与 Grails 记录器相同的配置。

附言无需发布任何代码,因为所有代码都只是默认配置。

多谢!

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

编写完本文后,您可以在上述任何工件中添加用于调试的记录器,例如:

log.debug "Any Message"

有关更多设置,您可以在此处阅读:https://logback.qos.ch/manual/groovy.html

最新更新