【问题标题】:How to set DEBUG level for my code, but ERROR for everything else如何为我的代码设置调试级别,但为其他所有内容设置错误
【发布时间】:2014-08-09 12:26:37
【问题描述】:

我正在开发一个 Grails 应用程序。在我的 Config.groovy 中,我尝试配置 log4j,以便我的应用程序的代码在 DEBUG 级别记录,而所有 groovy/grails/spring/hibernate 代码(几乎所有其他代码)都在 ERROR 级别记录。

我现在只想登录到控制台(标准输出)。

在浏览了许多博客文章和 SO 答案之后,我似乎仍然无法使其工作。这是我当前的设置:

log4j = {

    appenders {
        appender new ConsoleAppender(name: "appStdOut",
                threshold: Level.toLevel("DEBUG"),
                layout: new PatternLayout("..."))
        appender new ConsoleAppender(name: "stdout",
                threshold: Level.toLevel("ERROR"),
                layout: new PatternLayout("..."))
    }

    root {
        error 'stdout'
        debug 'appStdOut'
    }

    error  stdout: [
                'org.codehaus.groovy.grails.web.servlet',
                'org.codehaus.groovy.grails.web.pages', 
                'org.codehaus.groovy.grails.web.sitemesh',
                'org.codehaus.groovy.grails.web.mapping.filter',
                'org.codehaus.groovy.grails.web.mapping',
                'org.codehaus.groovy.grails.commons', 
                'org.codehaus.groovy.grails.plugins', 
                'org.codehaus.groovy.grails.orm.hibernate',
                'org.springframework',
                'org.hibernate',
                'net.sf.ehcache.hibernate'
            ]

    debug   appStdOut: [ 'mondrack' ] // This is the package name for my app

}
  • 上述配置也会产生所有框架和库的调试日志。

  • 当我将根闭包更改为 { error 'stdout', 'appStdOut' } 时,我的 DEBUG 日志不会打印,而只会打印 ERROR 日志。

  • 当我再次将根闭包更改为 { debug 'stdout', 'appStdOut' } 时,我看到了所有框架和库的调试日志。

这真的让我发疯了!!我如何告诉它在 DEBUG 及以上打印我的包,并在 ERROR 及以上打印其他所有内容,到标准输出?

【问题讨论】:

    标签: grails log4j


    【解决方案1】:

    应该这样做

    log4j = {
        appenders {
            def logPattern = '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{2} - %m%n'
    
            // define a console appender named 'stdout' that uses the above patter
            console name: 'stdout', layout: pattern(conversionPattern: logPattern)
        }
    
        root {
            // the root logger - from which all other loggers inherit - uses the 'stdout' appender
            // and logs at the error level                     
            error 'stdout'
        }
    
        // packages that begin with 'mondrack' and Grails artefacts log at the debug level
        debug 'mondrack', 'grails.app'
    }
    

    【讨论】:

    • 我应该理解为 - “创建一个附加程序,设置根记录器以使用它并默认以错误级别打印。但是对于进一步指定的包,覆盖默认值并将其设置为调试级别”?
    • @Textant 正确,我添加了一些解释性 cmets
    • 谢谢!令人难以置信的是,当解决方案像您发布的那样简单时,我是如何偏离轨道的。 * 掌心 *
    • 是的,我对此印象深刻:)
    猜你喜欢
    • 2013-08-26
    • 2021-07-11
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多