Log4中已经没有通过Grails 3.2.8

时间:2017-03-30 23:56:24

标签: grails logging log4j

正如我们所知,默认情况下,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相同的配置。

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

非常感谢!

1 个答案:

答案 0 :(得分:0)

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