【问题标题】:Logging configuration with file appenders and stdout in grails在 grails 中使用文件附加程序和标准输出记录配置
【发布时间】: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.outusage.logapplication.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中显示的设置。

标签: grails log4j


【解决方案1】:

试试这个设置。

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

只会为usage.gui 记录error

【讨论】:

  • 这样的工作:所有'usage.gui' 输出到正确的文件。但是其他所有内容仍然混淆'stdout',并且没有任何内容添加到'application' appender。
  • @GeneGolovchinsky 看看我上面的更新。为了便于理解,我对其进行了简化。
  • 那么要将多个日志记录级别添加到单个附加程序中,我是否指定限制最少的级别(即TRACE),然后通过配置记录器来控制实际记录的内容?
  • 我尝试了您更新的建议,但行为保持不变:所有内容都被推入 catalina.out,usage.gui 内容进入正确的文件,而 application.log 没有收到任何输出。跨度>
  • 您正在为application.log登录哪个级别?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-22
    • 2012-11-23
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    相关资源
    最近更新 更多