Grails Log4J 无法在不使用 Root 的情况下配置信息记录器
Grails Log4J Can't Configure Info Logger without Using Root
所以我认为我在 grails 中配置 log4j 时遇到了一个非常简单的问题,但无法在任何地方找到解决方案。我目前正在尝试将其设置为所有错误都转到堆栈跟踪文件,然后应用程序打印出的所有信息和警告日志都转到控制台。这就是我目前的配置方式:
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
它会记录所有未明确定义的内容,因此 info/warning 来自插件的日志和其他东西会在我想要的时候出现来自grails应用程序的那些。有没有一种方法可以将不同的日志级别指向不同的附加程序,而无需通过根进行设置?
Is there a way I can point different log levels to different appenders
without needing to set it up through the root?
是的。 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 上记录了很多相关功能。
所以我认为我在 grails 中配置 log4j 时遇到了一个非常简单的问题,但无法在任何地方找到解决方案。我目前正在尝试将其设置为所有错误都转到堆栈跟踪文件,然后应用程序打印出的所有信息和警告日志都转到控制台。这就是我目前的配置方式:
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
它会记录所有未明确定义的内容,因此 info/warning 来自插件的日志和其他东西会在我想要的时候出现来自grails应用程序的那些。有没有一种方法可以将不同的日志级别指向不同的附加程序,而无需通过根进行设置?
Is there a way I can point different log levels to different appenders without needing to set it up through the root?
是的。 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 上记录了很多相关功能。