【问题标题】:jboss eap 6.1 custom log4j to server.logjboss eap 6.1 自定义 log4j 到 server.log
【发布时间】:2014-10-30 20:32:20
【问题描述】:

所以我一直在尝试在 JBoss EAP 6.1 上的 ear 应用程序中使用自定义 log4j.xml。我发现如果我使用文件附加程序和直接的静态文件名,它将按照我的预期记录到该文件(在这种情况下,在我的战争中使用 log4j2.xml,但如果我使用 log4j.xml,它会做同样的事情使用 log4j 1.2):

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="debug">
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
    </Console>
    <File name="A1" fileName="server.log">
      <PatternLayout pattern="%t %-5p %c{2} - %m%n" />
    </File>
  </Appenders>
  <Loggers>
    <Logger name="com.xxx.yyy" level="debug" additivity="false">
      <AppenderRef ref="A1" />
    </Logger>
  </Loggers>
</Configuration>

但这会导致它记录到 [jboss-eap]/bin/server.log。我可以放入替换变量以将其指向 jboss 日志目录下的文件(在 eap 情况下,[jboss-eap]/standalone/log/test.log):

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="debug">
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
    </Console>
    <File name="A1" fileName="${sys:jboss.server.log.dir}/test.log">
      <PatternLayout pattern="%t %-5p %c{2} - %m%n" />
    </File>
  </Appenders>
  <Loggers>
    <Logger name="com.xxx.yyy" level="debug" additivity="false">
      <AppenderRef ref="A1" />
    </Logger>
  </Loggers>
</Configuration>

我可以看到它正在为我做替换:

16:16:28,626 INFO  [stdout] (ServerService Thread Pool -- 71) 2014-10-30 16:16:28,626 
DEBUG Starting FileManager C:\Users\xxxxxx\Apps\jbossdevstudio\runtimes\jboss-
eap\standalone\log/test.log

输出实际上会显示在 test.log 中。但我真正想要的只是将日志记录到标准 server.log 中。如果我尝试上述替换但使用 server.log 而不是 test.log,则实际上没有任何记录。我尝试过的另一件事是使用控制台附加程序,但随后我得到了非常长的输出行,它记录了两次时间戳并有两个日志级别指示器:

16:24:08,038 INFO  [stdout] (http-/0.0.0.0:8080-1) 2014-10-30 16:24:08,036 INFO  
     [http-/0.0.0.0:8080-1] com.xxx.TestServlet (TestServlet.java:25) - This is a test

当我真正想要的只是:

2014-10-30 16:24:08,036 INFO  [http-/0.0.0.0:8080-1] com.xxx.TestServlet 
    (TestServlet.java:25) - This is a test

所以我不知道该怎么做。我们可以配置 jboss 内部日志配置,但是在我们的组织中,在服务器中更改此类内容涉及到我们的中间件团队,如果我们需要调整某些类的日志级别,我们宁愿只更改自定义 log4j.xml。如有必要,我们可以接受更长的输出,但我们也使用 Splunk,我相信它会在 stdout 输出的日志级别而不是我们在尝试按日志级别过滤日志时实际记录的日志级别上感到困惑。

如果大家有任何建议,我将不胜感激。

【问题讨论】:

    标签: log4j jboss-eap-6


    【解决方案1】:

    我不建议让 appender 写入服务器正在写入的相同文件。您最终可能会出现意外行为。我也不建议使用ConsoleAppender,因为System.outSystem.err 已包装,如您所见,您的所有消息都在INFO 级别指定。

    最好的选择是不包括日志配置并使用服务器日志配置。您拥有的主要优势是您无需重新部署您的应用程序,甚至无需重新启动服务器即可进行大多数更改。它们可以在运行时发生。正如你所说的那样,这对你来说可能是一种痛苦。

    如果您需要继续包含 log4j 配置文件,您最好的选择是写入不同的文件,而不是写入控制台。

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2013-08-25
      相关资源
      最近更新 更多