我的grails应用程序中有一个配置错误导致我的appender将输出发送到错误的位置,或者根本没有。似乎有一些关于重复记录的问题,但我无法对我的情况应用任何答案。
这是我的日志配置代码段:
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'
然后没有任何内容记录到任何文件appender,但stdout仍然进入catalina.out(绕过log4j)。
我希望'usage.gui'记录器的输出转到usage.log
文件,从所有其他记录输出转到application.log
文件,并且所有print语句输出都去到catalina.out
。我不想要冗余日志记录。我该如何配置?
更新 在回答@ dmahapatro的问题时,使用标准grails logging
来登录应用程序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)
}
答案 0 :(得分:0)
尝试此设置。
stdout
保留在root位置(如果需要,请将级别更改为info
/ debug
/ all
)。设置false
的可加性,以限制控制台日志被添加到usage
或application
appender。root
,为additivity
和false
设置application
usage
以限制控制台日志记录。grails.app
针对application
在application.log
中记录所有与应用程序相关的日志。像:
root {
error 'stdout'
additivity: false
}
info usageAppender: 'usage.gui'
additivity: false
info application: 'grails.app'
additivity: false
注意: -
不同日志记录级别的日志不适用于相同的包结构。例如:
info usageAppender: 'usage.gui'
error usageAppender1: 'usage.gui'
只会记录error
的{{1}}。
答案 1 :(得分:0)
大多数情况下,您没有看到src / groovy中的日志打印,因为在应用程序中设置了更高级别的ERROR。因此,如果将所有类日志设置为调试级别,则记录器调试正在运行。