2

我的 grails 应用程序中有一个配置错误,导致我的附加程序将输出发送到错误的位置,或者根本不发送。似乎有许多关于重复记录的问题,但我无法将任何答案应用于我的情况。

这是我的日志记录配置片段:

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、 inusage.log和 in 中application.log。直接发送到标准输出(绕过 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)
}
4

2 回答 2

0

大多数情况下,您看不到来自 src/groovy 的日志打印,因为在应用程序中设置了更高级别的错误。因此,如果您将所有类日志设置为调试级别,那么记录器调试正在工作。

于 2014-06-27T19:04:41.560 回答
0

试试这个设置。

  • 保持stdout在根目录(如果需要,将级别更改为info/ debug/ all)。将 additivity 设置false为以限制控制台日志被添加到usageapplicationappender。
  • 其他 appender 继承自,root设置additivity false并限制控制台日志记录。applicationusage
  • 使用grails.appagainstapplication记录所有与应用程序相关的日志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.usage.gui

于 2013-06-15T01:39:16.473 回答