log4j复制日志grails

log4j复制日志grails,grails,log4j,Grails,Log4j,我从我的grails 1.3.7应用程序中进行日志记录,并在日志中看到基本上重复的记录: 12/07/25 23:57:39 TRACE querium.SearchService: setting snippet for posting 1855803974 [null] 54: document 1534340330 [632] 25 Jul 2012 23:57:39,943 7851 TRACE pool-1-thread-1 SearchService:? gene 60258

我从我的grails 1.3.7应用程序中进行日志记录,并在日志中看到基本上重复的记录:

12/07/25 23:57:39 TRACE querium.SearchService: setting snippet for posting 1855803974 [null] 54: document 1534340330 [632]
25 Jul 2012 23:57:39,943     7851 TRACE pool-1-thread-1 SearchService:? gene 60258782 - setting snippet for posting 1855803974 [null] 54: document 1534340330 [632]
我的日志记录配置如下:

appenders {
    // appender for usage tracking
    appender new org.apache.log4j.RollingFileAppender(
        name:"usageAppender",
        maxFileSize:"100KB",
        maxBackupIndex: 10000,
        file:"usage.log",   // "/tmp/logs/usage.log",
        layout:pattern(conversionPattern: '%d{DATE} %5p %c{1}:%L - %m%n')
    )
    appender new org.apache.log4j.RollingFileAppender(
        name:"querium",
        maxFileSize:"1000KB",
        maxBackupIndex: 10000,
        file:"querium.log",   // "/tmp/logs/querium.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 {
    error 'querium', 'stdout'
}

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' 

warn  'org.mortbay.log'
debug 'grails.app.service'
trace 'grails.app.service.backgroundservice'
error 'org.hibernate.SQL'
trace 'grails.app.controller.com.fxpal.querium.UiController'
trace 'grails.app.controller.com.fxpal.querium.CommentController'
warn  'grails.app.controller.com.fxpal.querium.TopicController'
off 'grails.app.service.com.fxpal.redis.RedisService'
trace 'grails.app.service.com.fxpal.querium.SearchService'
debug   'com.fxpal.cloudwork.docubrowse.SearchDocubrowse'
off 'grails.app.service.com.fxpal.proxy.ProxyService'

debug 'org.codehaus.groovy.grails.plugins.springsecurity.*'
debug 'com.fxpal.querium.CiteSeerDocumentParser'

debug 'com.fxpal.querium.LoggingFilters'
    info 'usageAppender':'usage.gui'
正确的数据将发送到
usageAppender
。在这个奥秘中练习过的人能理解为什么我在剩下的日志记录中获得了两倍的记录,但略有不同吗


编辑于2012年7月26日:添加了日志配置的其余部分。

您看到的输出看起来有两个不同的控制台附加器连接到根日志记录器(或者可能有一个连接到根日志记录器,另一个连接到日志记录器树下的某个位置)。您看到的第二行是您自己的
stdout
logger格式,但第一行与

%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
这不是Grails的默认格式。检查grailslog4jdsl解析器的代码时,我注意到它在开始处理DSL之前没有重置日志配置。因此,我怀疑您在类路径的某个地方有一个零散的
log4j.properties
log4j.xml
文件(在
src/java
或类似文件中,或埋在您的应用程序所依赖的一个JAR文件中),它在DSL解析器运行之前创建了这个额外的追加器。您可以在
BootStrap.init中通过执行

this.getClass().getClassLoader().getResources("log4j.properties").each {
  println it
}

(对于log4j.xml也是如此)。如果发现它在一个JAR中,并且您不能轻松地删除它,那么您可以尝试调用
LogManager.loggerRepository.resetConfiguration()
,作为
log4j
闭包中的第一件事(在您自己的
appenders
部分之前)。

您能恢复“为清晰起见而删除”的记录器定义吗?我在这段代码中看不到任何会导致您看到的效果的东西,但在省略的部分中可能有一些东西解释了这一点。另外,在stdout或queryum.log中,您在哪里看到重复的消息?我根据您的请求修改了问题中的示例代码。我在tomcat日志目录的
catalina.out
中看到了翻倍的消息。
queryum.log
文件是正确的,并且只包含以
DD MMM YYYY
格式开头的记录(问题顶部我的日志示例中的第二行)。另一种方法是,您可以检查logback.groovy以向应用程序记录器添加additivity=“false”,例如:记录器('db.manager',DEBUG,['STDOUT',false),请参阅: