2

我正在尝试在 JBoss EAP 上部署 grails 应用程序,问题是除了 stdout 和 stderr 之外,没有记录我的应用程序的输出。我真的不明白在这种情况下日志是如何工作的,因为 jboss 使用一些内部日志系统而 grails 使用 log4j。

这是我在standalone.xml 中的日志配置:

    <subsystem xmlns="urn:jboss:domain:logging:1.1">
        <console-handler name="CONSOLE">
            <level name="INFO"/>
            <formatter>
                <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
            </formatter>
        </console-handler>
        <periodic-rotating-file-handler name="FILE">
            <formatter>
                <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
            </formatter>
            <file relative-to="jboss.server.log.dir" path="server.log"/>
            <suffix value=".yyyy-MM-dd"/>
            <append value="true"/>
        </periodic-rotating-file-handler>
        <logger category="com.arjuna">
            <level name="WARN"/>
        </logger>
        <logger category="org.apache.tomcat.util.modeler">
            <level name="WARN"/>
        </logger>
        <logger category="sun.rmi">
            <level name="WARN"/>
        </logger>
        <logger category="jacorb">
            <level name="WARN"/>
        </logger>
        <logger category="jacorb.config">
            <level name="ERROR"/>
        </logger>
        <root-logger>
            <level name="INFO"/>
            <handlers>
                <handler name="CONSOLE"/>
                <handler name="FILE"/>
            </handlers>
        </root-logger>
    </subsystem>

这是默认的。

这个 log4j 配置在我的 Config.groovy 中:

// log4j configuration
log4j = {
    // Example of changing the log pattern for the default console appender:
    //
    //appenders {
    //    console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
    //}

    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'

    all additivity: false, console: [
            'grails.app.controllers.com.redhat.theses',
            'grails.app.domain.your.com.redhat.theses',
            'grails.app.services.com.redhat.theses',
            'grails.app.taglib.com.redhat.theses',
            'grails.app.conf.com.redhat.theses',
            'grails.app.filters.com.redhat.theses'
    ]
}

我真的不明白这个日志记录的东西,它太令人困惑了,我只想记录至少所有的错误,对于初学者来说。有人会认为这样一个关键功能默认情况下是有效的。

如果我在启动 JBoss 时设置此属性:

./standalone.sh -Dorg.jboss.as.logging.per-deployment=false

它完全按照我的意愿工作。但一切都好吗?为什么我必须设置这个属性才能获得像日志记录这样的关键功能,真的吗?

非常感谢您的帮助,如果我听起来有点自大,我很抱歉,我已经尝试了好几个小时,但我仍然在最初的状态。

4

1 回答 1

2

org.jboss.as.logging.per-deployment 环境变量,AKA 主机属性,AKA 环境属性告诉 JBoss 使用哪个日志配置。将其设置为 true 会告诉 JBoss 在正在部署的应用程序中使用日志记录配置。我不知道如何在 Grails Config.groovy 中进行设置。将该主机属性设置为 false 后,我在 JBoss 中进行配置。False 表示使用 JBoss 中的日志记录配置。

在 JBoss 中将该属性设置为 false,然后创建一个 grails.app 类别并将其记录到文件处理程序中。这适用于我在域模式下运行的 Grails 和 EAP 6.0。

于 2015-02-26T01:23:06.493 回答