jboss eap 6.1自定义log4j到server.log

时间:2014-10-30 20:32:20

标签: log4j jboss-eap-6

所以我一直在尝试在JBoss EAP 6.1的耳朵应用程序中使用自定义log4j.xml。我发现如果我使用文件appender和一个直接的静态文件名,它将按照我的预期登录到该文件(在我的战争中使用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,实际上没有记录任何内容。我尝试过的另一件事是使用控制台appender,但后来我得到了很长的输出行,它记录时间戳两次,并有两个日志级别指示器:

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输出的日志级别上混淆,而不是我们在尝试按日志级别过滤日志时实际记录的内容。

我很感激有人提出的任何建议。

1 个答案:

答案 0 :(得分:1)

我不建议让appender写一个服务器写的同一个文件。您最终可能会遇到意外行为。我也不建议使用ConsoleAppender作为System.outSystem.err,并且如您所见,所有邮件都在INFO级指定。

最佳选择是不包含日志记录配置并使用服务器日志记录配置。您拥有的主要优势是您不需要重新部署应用程序,甚至无需重新启动服务器即可进行大多数更改。它们可以在运行时发生。正如你所说,虽然你可能会感到痛苦。

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