在grails中使用文件附加器和标准输出记录配置

在grails中使用文件附加器和标准输出记录配置,grails,log4j,Grails,Log4j,我的grails应用程序中有一个配置错误,导致我的appender将输出发送到错误的位置,或者根本不发送。似乎有许多关于重复日志记录的问题,但我无法将任何答案应用于我的情况 以下是我的日志配置代码段: log4j = { appenders { // appender for usage tracking appender new org.apache.log4j.RollingFileAppender(

我的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
中。直接发送到标准输出(绕过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
    /
    all
    )。将additivity设置为
    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'