所以我一直在尝试在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输出的日志级别上混淆,而不是我们在尝试按日志级别过滤日志时实际记录的内容。
我很感激有人提出的任何建议。
答案 0 :(得分:1)
我不建议让appender写一个服务器写的同一个文件。您最终可能会遇到意外行为。我也不建议使用ConsoleAppender
作为System.out
和System.err
,并且如您所见,所有邮件都在INFO
级指定。
最佳选择是不包含日志记录配置并使用服务器日志记录配置。您拥有的主要优势是您不需要重新部署应用程序,甚至无需重新启动服务器即可进行大多数更改。它们可以在运行时发生。正如你所说,虽然你可能会感到痛苦。
如果您需要继续包含log4j配置文件,最好的选择是写入不同的文件,而不是写入控制台。