【发布时间】:2013-06-14 23:27:47
【问题描述】:
我的 grails 应用程序中有一个配置错误,导致我的附加程序将输出发送到错误的位置,或者根本不发送。似乎有很多关于重复记录的问题,但我无法将任何答案应用于我的情况。
这是我的日志配置 sn-p:
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。直接发送到 stdout 的输出(绕过 log4j)出现在 catalina.out 中
如果我设置
info additivity: false 'usageAppender': 'usage.gui'
然后任何一个文件附加程序都不会记录任何内容,但 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)
}
【问题讨论】:
-
会this 帮忙吗?
-
当我在
usageAppender上设置additivity: false时,它停止工作。我希望所有其他 log4j 输出都转到 application.log 文件,但我不确定如何指定。我以为这就是我的root { error 'application' }行所做的。 -
强调前面问题I provided by the link中显示的设置。