【问题标题】:Grails WAR on Tomcat "Log4J" not working at allTomcat“Log4J”上的 Grails WAR 根本不起作用
【发布时间】:2011-01-16 18:43:43
【问题描述】:

我在 grails 应用程序的 Config.groovy 中正确配置了 log4j DSL。使用 grails run-app 运行应用程序会转储完美的日志记录,正如我在 DSL 中指定的那样。然而,在进行 grails 战争以生成战争文件并将其部署到 tomcat 之后,日志记录就消失了。我在任何地方都看不到它工作,除了 tomcat 控制台在调试级别显示数百万条日志语句并且没有任何特定于我登录日志文件的内容。


log4j = {
        appenders {
                 appender new org.apache.log4j.DailyRollingFileAppender(name: "tomcatLog", datePattern: "'.'yyyy-MM-dd", file: "${logDirectory}/snm.log".toString(), layout: pattern(conversionPattern: '[%d{yyyy-MM-dd hh:mm:ss.SSS}] %p %c{5} %m%n'))
        }
        root {
            info 'stdout', 'tomcatLog'
            additivity = true
        }
        info    'grails.app',
                'grails.app.controller',
                'grails.app.bootstrap',
                'grails.app.service',
                'grails.app.task',
                'commons',
                'jsontwitter'
    }

你能解释一下上面的DSL吗?它将 commons.* 和 jsontwitter.* classes 日志发送到指定的日志文件但没有控制器,服务日志保存在文件中。

谢谢, 阿拉姆·谢尔

【问题讨论】:

    标签: tomcat grails log4j


    【解决方案1】:

    你需要知道,tomcat 使用什么日志目录。这是由 grails-app/conf/Config.groovy 的以下 sn-p 完成的:

    def catalinaBase = System.properties.getProperty('catalina.base')
    if (!catalinaBase) catalinaBase = '.'   // just in case
    def logDirectory = "${catalinaBase}/logs"
    
    // default for all environments
    log4j = { root ->
         appenders {
                 rollingFile name:'stdout', file:"${logDirectory}/${appName}.log".toString(), maxFileSize:'100KB'
                 rollingFile name:'stacktrace', file:"${logDirectory}/${appName}_stack.log".toString(), maxFileSize:'100KB'
        }
    
        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'
        root.level = org.apache.log4j.Level.WARN
    }
    
    // special settings with production env
    environments {
        development {
            log4j = { root ->
                appenders {
                           console name: 'stdout', layout: pattern(conversionPattern: "%d [%t] %-5p %c %x - %m%n")
                }
                warn       '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'
                debug  'com.netjay'
                root.level = org.apache.log4j.Level.INFO
            }
        }
    }
    

    【讨论】:

    • 这会为我记录日志。但是当我更新了这个问题时,您能否看看我为我的日志记录指定的 DSL,并告诉我这可能有什么问题,因为除了源之外,来自服务、域、控制器的日志都不会发送到指定的附加程序包,例如公地和 json 推特。同样在 catalina.out 中,所有内容都被附加了,但也有大量的 DEBUG 级别日志记录:(所以这对我来说有点令人困惑。
    • 我认为你的 DSL 中的包定义是错误的。您需要删除前缀“grails.app”。因此,如果您的域类位于包 com.mycompany.abc.MyCoolDomainClass 中,则必须在 DSL 中使用 com.mycompany.abc。如果您尚未在域类、控制器等中使用包,建议始终使用包,并且永远不要将任何东西放在根包中。
    【解决方案2】:

    jira 上还有一个错误:http://jira.codehaus.org/browse/GRAILS-5666:Run-war 有一些类路径冲突。

    Marc Palmer 说:在使用定义继承“全局”的 deps 的插件的应用程序中,日志记录被杀死

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      相关资源
      最近更新 更多