在grails中使用文件附加器和标准输出记录配置
我的grails应用程序中有一个配置错误,导致我的appender将输出发送到错误的位置,或者根本不发送。似乎有许多关于重复日志记录的问题,但我无法将任何答案应用于我的情况 以下是我的日志配置代码段:在grails中使用文件附加器和标准输出记录配置,grails,log4j,Grails,Log4j,我的grails应用程序中有一个配置错误,导致我的appender将输出发送到错误的位置,或者根本不发送。似乎有许多关于重复日志记录的问题,但我无法将任何答案应用于我的情况 以下是我的日志配置代码段: log4j = { appenders { // appender for usage tracking appender new org.apache.log4j.RollingFileAppender(
log4j = {
appenders {
// appender for usage tracking
appender new org.apache.log4j.RollingFileAppender(
name:"usageAppender",
maxFileSize:"1000KB",
maxBackupIndex: 10000,
file: "/var/log/tomcat6/app/usage.log",
layout:pattern(conversionPattern: '%d{DATE} %5p %c{1}:%L - %m%n')
)
appender new org.apache.log4j.RollingFileAppender(
name:"application",
maxFileSize:"1000KB",
maxBackupIndex: 10000,
file:"/var/log/tomcat6/app/application.log",
layout:pattern(conversionPattern: '%d{DATE} %8X{memoryused} %5p %t %c{1}:%L %X{username} %X{request} - %m%n')
)
console name:'stdout', layout:pattern(conversionPattern: '%d{DATE} %8X{memoryused} %5p %t %c{1}:%L %X{username} %X{request} - %m%n')
}
root {
// also tried error 'stdout'
error 'application'
}
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'
info 'usageAppender':'usage.gui'
}
当我的程序运行时,输出显示在catalina.out
、usage.log
和application.log
中。直接发送到标准输出(绕过log4j)的输出显示在catalina.out中
如果我设定
info additivity: false 'usageAppender': 'usage.gui'
然后没有任何东西被记录到任何一个文件appender,但是stdout仍然进入catalina.out(绕过log4j)
我希望“usage.gui”记录器的输出转到usage.log
文件,所有其他日志的输出转到application.log
文件,所有打印语句输出转到catalina.out
。我不想要多余的日志记录。我如何配置它
更新
在回答@dmahapatro的问题时,应用程序中的日志记录可以使用标准的grails日志记录来完成
log.trace('some event');
或者使用如下创建的自定义记录器:
def usageLog
public UsageService() {
usageLog = Logger.getLogger("usage.gui")
}
并通过调用此函数来使用:
protected void writeRecord(String topicId, String user, Long id, Long priorId, Long clientTime, String component, String action, String otherData) {
String msg = "$topicId\t$user\t$id\t$priorId\t$clientTime\t$component\t$action\t$otherData"
usageLog.info(msg)
}
试试这个设置
- 将
保留在根目录下(如果需要,将级别更改为stdout
/info
/debug
)。将additivity设置为all
,以限制控制台日志被添加到false
或用法
附录中应用程序
- 其他附加程序继承自
,为根目录
设置应用程序
可加性
,并使用假
限制控制台日志记录
- 对
使用application
将所有与应用程序相关的日志记录在grails.app
中application.log
不同日志记录级别的日志不适用于相同的包结构。例如:
info usageAppender: 'usage.gui'
error usageAppender1: 'usage.gui'
在大多数情况下,您不会看到从src/groovy打印日志,因为在其他一些地方,应用程序中设置了更高级别的错误。因此,如果您将所有类的日志设置为debug level,那么记录器debug正在工作。会有帮助吗?当我在
usageAppender
上设置additivity:false
时,它停止工作。我希望所有其他log4j输出都转到application.log文件,但我不确定如何指定它。我想这就是我的root{error'application}
行所做的。请强调前面问题中显示的设置。这种方法很有效:所有'usage.gui'
输出都会进入正确的文件。但是其他的东西仍然混在一起,'stdout'
并且没有任何东西被添加到'application'
附录中。@GeneGolovchinsky看一下我上面的更新。为了便于理解,我对其进行了简化。因此,要将多个日志记录级别添加到一个appender中,我是否指定限制最少的级别(即,TRACE
),然后通过配置日志记录程序来控制实际记录的内容?我尝试了您的更新建议,但行为保持不变:所有内容都被推入catalina.out,usage.gui文件进入正确的文件,而application.log没有收到任何输出。您记录的是哪个级别的application.log
?
info usageAppender: 'usage.gui'
error usageAppender1: 'usage.gui'