【问题标题】:Grails app won't create new log on serverGrails 应用程序不会在服务器上创建新日志
【发布时间】:2012-11-15 14:53:28
【问题描述】:

我正在尝试创建 4 个不同的日志来写入(使用 Tomcat)。这是代码(有一些奇怪的东西,因为我正在试验它):

log4j = {

    appenders {
        rollingFile  name:'infoLog', file:'/logs/info.log', threshold: org.apache.log4j.Level.INFO
        rollingFile  name:'warnLog', file:'/logs/warn.log', threshold: org.apache.log4j.Level.WARN
        rollingFile  name:'errorLog', file:'/logs/error.log', threshold: org.apache.log4j.Level.ERROR
        rollingFile name:'debugLog', file:'/logs/debug.log', threshold: org.apache.log4j.Level.DEBUG
    }
    root {
        info 'infoLog', 'errorLog', 'warnLog', 'debugLog'
        error 'errorLog'
        warn 'warnLog'
        debug 'debugLog'        
    }

    info 'grails.app'
    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',
           'net.sf.ehcache.hibernate'

    warn   'org.mortbay.log'
    debug 'grails.app'
}

当我部署和运行应用程序时,我在 catalina.out 中得到了这个:

log4j:ERROR setFile(null,true) 调用失败。 java.io.FileNotFoundException: /logs/info.log (没有这样的文件或 目录)在 java.io.FileOutputStream.openAppend(Native Method) 在 java.io.FileOutputStream.(FileOutputStream.java:177) 在 java.io.FileOutputStream.(FileOutputStream.java:102)...

(对于我尝试创建的每个日志,我都会收到相同的消息)。我错过了什么吗?

谢谢

【问题讨论】:

    标签: tomcat grails


    【解决方案1】:

    该特定错误消息可能意味着/logs 目录不存在,或者它不能由运行 Grails 应用程序的用户 ID 写入。

    但更一般地说,你的根记录器定义是错误的,你只需要一个日志级别(默认情况下你想为你没有指定更精确规则的记录器使用的级别)附加到所有附加程序,例如

    root {
        error 'infoLog', 'errorLog', 'warnLog', 'debugLog'
    }
    

    各种附加程序的阈值将确保每个附加程序都获得正确的消息:使用此配置debugLog 将接收所有消息(调试、信息、警告和错误); infoLog 将收到信息、警告和错误; warnLog 将收到警告和错误;而errorLog 将只收到错误消息。

    【讨论】:

    • 我实际上已经让它工作了,但没有意识到,但你的观察是对的。如果你放 dubug 'infoLog'、'errorLog' 等,它实际上只会记录调试并降低...但是感谢您的提示,让我走上正轨。
    • @js3v 您应该在root 部分中指定您想要用于以下没有指定特定级别的类的任何日志级别。 error 的根级别加上debug 'grails.app' grails.app.anything 调试消息发送到debugLog
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多