没有使用Root,Grails Log4J无法配置信息记录器

问题描述

所以我认为在grails中配置log4j有一个非常简单的问题,但是在任何地方都找不到解决方案。我目前正在尝试将其设置为将所有错误移至stacktrace文件,然后将应用程序输出的所有信息+警告日志移至控制台。这是我目前对其进行配置的方式:

log4j = {

appenders {
    rollingFile name: "stacktrace",maxFileSize: "10MB",maxBackupIndex:2,file:"/tmp/logs/stacktrace.log",threshold: org.apache.log4j.Level.ERROR
    console name: "stdout",threshold: org.apache.log4j.Level.INFO
}

root {
    error 'stacktrace','stdout'
}

info stdout: 'grails.app'

error   'org.codehaus.groovy.grails.web.servlet',// controllers
        'org.codehaus.groovy.grails.web.pages',// GSP
        'org.codehaus.groovy.grails.web.sitemesh',// layouts
        'org.codehaus.groovy.grails.web.mapping.filter',// URL mapping
        'org.codehaus.groovy.grails.web.mapping',// URL mapping
        'org.codehaus.groovy.grails.commons',// core / classloading
        'org.codehaus.groovy.grails.plugins',// plugins
        'org.codehaus.groovy.grails.orm.hibernate',// hibernate integration
        'org.springframework','org.hibernate','net.sf.ehcache.hibernate'

}

现在,我必须为其设置根目录才能将错误打印到文件中。但是,如果我尝试将Info / Warn级别添加到根配置中以转到stdout,它将记录所有未明确定义的内容,因此,当我只希望从插件和内容中获取信息/警告日志时,它们就会通过grails应用程序。有没有一种方法可以将不同的日志级别指向不同的附加程序,而无需通过根目录进行设置?

解决方法

有没有一种方法可以将不同的日志级别指向不同的附加程序 无需通过根目录进行设置?

是的。 Log4j为此提供了很大的灵活性。例如,您可以通过将名称作为密钥传递给日志级别方法之一来将附加程序附加到特定的记录器:

error myAppender: "grails.app.controllers.BookController"

要将多个附加器添加到记录器,请将它们添加到同一级别的声明中:

error myAppender:      "grails.app.controllers.BookController",myFileAppender:  ["grails.app.controllers.BookController","grails.app.services.BookService"],rollingFile:     "grails.app.controllers.BookController"

我们在https://grails.github.io/grails2-doc/2.5.6/guide/conf.html#logging中记录了许多相关功能。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...