在 Wildfly 8.2 中配置日志的正确方法

Posted

技术标签:

【中文标题】在 Wildfly 8.2 中配置日志的正确方法【英文标题】:Right way to configure the log in Wildfly 8.2 【发布时间】:2015-08-09 04:31:15 【问题描述】:

我在 Wildfly-8.2.0 中设置日志时感到困惑。最初我使用自己的日志系统,将 log4j.xml 内置到 WAR 文件中,一切都运行良好。但是,当我对日志配置进行任何更改时,我需要重新部署应用程序以使更改生效。所以,我切换到了 JBoss logger 子系统。以下是我从jboss-clistandalone.xml 所做的配置

/subsystem=logging/custom-handler=myplatform:add(class=org.apache.log4j.RollingFileAppender, module=org.jboss.log4j.logmanager, formatter="%d.yyyy-MM-dd %-5p [%c] (%t) %s%E%n", properties=MaxFileSize=1024000,maxBackupIndex=20,file="$jboss.server.log.dir/myplatform-debug.log")

所以它在standalone.xml中添加了以下配置

            <custom-handler name="example" class="org.apache.log4j.RollingFileAppender" module="org.jboss.log4j.logmanager">
                <formatter>
                    <pattern-formatter pattern="%d.yyyy-MM-dd %-5p [%c] (%t) %s%E%n"/>
                </formatter>
                <properties>
                    <property name="MaxFileSize" value="1024000"/>
                    <property name="maxBackupIndex" value="20"/>
                    <property name="file" value="$jboss.server.log.dir/ott-platform-log.log"/>
                </properties>
            </custom-handler>

然后是一个记录器

<logger category="com.mycompany.project.module1">
  <level name="DEBUG"/>
    <handlers>
      <handler name="myplatform"/>
    </handlers>
</logger>

一切正常,但我所有的应用程序日志也都记录到服务器日志中。而且,在控制台日志中也是如此。我不希望这种情况发生,毕竟我已经为我的项目单独配置了记录器!如何停止服务器记录我的日志记录到 server.log?或者有没有办法为此使用附加程序?如果有怎么办?

【问题讨论】:

【参考方案1】:

从“干净”standalone.xml 我执行以下操作:

    向控制台添加处理程序:
<profile>
    <subsystem xmlns="urn:jboss:domain:logging:2.0">
        ...
        <console-handler name="CONSOLE_HANDLER">
            <level name="DEBUG"/>
            <formatter>
                <named-formatter name="ECLIPSE_PATTERN"/>
            </formatter>
        </console-handler>
        ...
    如果你想要一个日志文件:
<profile>
    <subsystem xmlns="urn:jboss:domain:logging:2.0">
       ...
       <periodic-rotating-file-handler name="MI_PROJECT_FILE_HANDLER" autoflush="true">
            <formatter>
                <named-formatter name="ECLIPSE_PATTERN"/>
            </formatter>
            <file relative-to="jboss.server.log.dir" path="myProject.log"/>
            <suffix value=".yyyy-MM-dd"/>
            <append value="true"/>
        </periodic-rotating-file-handler>
       ...
    记录器(与 1 和 2 级别相同)注意use-parent-handlers
<logger category="com.company.project" use-parent-handlers="false">
    <level name="DEBUG"/>
    <handlers>
        <handler name="MI_PROJECT_FILE_HANDLER"/>
        <handler name="CONSOLE_HANDLER"/>
    </handlers>
</logger>
    我使用了自定义模式(相同级别):
<formatter name="ECLIPSE_PATTERN">
    <pattern-formatter pattern="%dHH:mm:ss,SSS %-5p [%c] (%t) %s%E%n"/>
</formatter> 
    请确保这一点:
<root-logger>
    <level name="INFO"/>
    <handlers>
        <handler name="CONSOLE"/>
        <handler name="FILE"/>
    </handlers>
</root-logger>

【讨论】:

根据您的方法尝试了各种配置后,我发现属性 use-parent-handlers="false" 是禁用登录到 server.log 所需要的。跨度> 赞成。将该行保持为粗体......但如果有人认为它有帮助,请保留所有其余配置:) 没错,只需要use-parent-handlers=false 即可完成您想做的事情。我还建议不要手动更新 XML,而是使用 CLI 或 Web 控制台进行日志记录更改,因为它们可以在运行时完成,而无需关闭服务器或重新启动服务器。 按照描述简单配置&lt;logger ...&gt;...&lt;/logger&gt; 仍然兼容wildfly 10。太棒了!

以上是关于在 Wildfly 8.2 中配置日志的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

Wildfly 8.2/undertow 读取超时

如何使用 netbeans 8.2 在 Wildfly 13 中运行 jsf mojarra 2.3?

在wildfly 8.2服务器中启动ContextLoaderListener期间的classNotfoundException

如何在wildfly 8.2 Final中将lib添加到模块中?

在 Wildfly 8.2 的standalone-full.xml 中设置系统属性

Wildfly - 配置 ActiveMQ 以使用 Postgres 日志