【问题标题】:grails log4j not workinggrails log4j 不工作
【发布时间】:2017-05-10 11:46:44
【问题描述】:

我正在使用 grails 并将我的 lo4j conf 指向路径 /var/log/eccount/dataSearch.log 并添加包(com.eccount.trending)我想登录到 info 级别,

log4j = {
    // Example of changing the log pattern for the default console
    // appender:
    //
    appenders {
        rollingFile name: 'dataSearch', maxFileSize: 1024, file: '/var/log/eccount/dataSearch.log', layout: pattern(conversionPattern: "%d{HH:mm:ss} %C %m%n")
    }

    info  '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',
           'net.sf.ehcache.hibernate',
           'com.eccount.trending'

    warn   'org.mortbay.log'

    root {
      info 'dataSearch'
      //additivity = true
    }
}

现在,在位于 src/java/ 的 Java 类中,我使用了如下定义的 org.sl4j.Logger

org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger("dataSearch");
// code flows here
logger.info("elasticSearchsBuilder", elasticSearchsBuilder);

但在应用程序运行后,我在 /var/log/eccount/dataSearch.log 上什么也看不到。它具有以下访问权限,

$ ls -l /var/log/eccount/
total 0
-rw-r--r-- 1 prayag prayag 0 Oct 25 12:59 dataSearch.log

错误级别适用于控制台(但不写入文件)。

【问题讨论】:

    标签: grails log4j


    【解决方案1】:

    您混淆了记录器和附加器。您已经在 DSL 中声明了一个名为 dataSearch 的附加程序,但您还没有将它附加到任何记录器,因此消息都将发送到默认的 stdout 附加程序。您的代码要求一个名为dataSearch记录器,但您尚未对其进行配置。

    如果您只想将 com.eccount.trending 消息发送到此附加程序,但将其他所有内容保留在默认标准输出中,那么您应该添加一个新行而不是将 com.eccount.trending 添加到现有的 info 行中

    info dataSearch:['com.eccount.trending'], additivity:false
    

    如果您希望 所有内容 记录到该文件而不是标准输出,则添加

    root {
      error 'dataSearch'
    }
    

    在这两种情况下,您都需要将代码更改为 getLogger("com.eccount.trending") 而不是 getLogger("dataSearch")

    请注意,如果您确实采用root 方法并将com.eccount.trending 留在现有的info 行中,那么您当前的配置存在语法错误 - 您缺少逗号,应该是

           'net.sf.ehcache.hibernate',
           'com.eccount.trending'
    

    【讨论】:

    • 我添加了root{ info 'dataSearch'},然后将getLogger 更改为getLogger('com.eccount.trending')。没用。我再次尝试了info dataSearch:['com.eccount.trending'], additivity:falsegetLogger('com.eccount.trending')。也没有用
    • @PrayagUpd 我刚刚注意到您的配置中缺少逗号,这有帮助吗?
    • 我将采用root 方法。但添加 , 无济于事。
    • @PrayagUpd 删除additivity = true,这将不起作用(即使它这样做也不会改变任何东西,因为这是默认设置)。除此之外,一切看起来都不错。
    • 也尝试删除它。但没有运气。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多