2017-08-04 103 views
0

我们正在研究将应用程序从WebSphere迁移到JBoss EAP 6.4。我在互联网上读到,自JBoss EAP 6.x以来,JBoss使用自己的日志框架,称为JBoss日志记录,而不是之前的log4j。如何使用JBoss独立记录JBoss服务器特定日志使用log4j记录日志和应用程序特定日志?

我们已经有一个log4j.properties文件用于应用程序特定的日志,它根据日志级别(log-error.log,log-info.log,...)将日志存储在单独的文件中,但实际上它们是还记录在控制台和server.log文件中。

在一方面,我们希望只与我们现有的log4j.properties配置文件来记录应用程序日志,还可以防止他们在server.log中和控制台登录过。

另一方面,我们希望服务器特定的日志记录在JBoss Logging框架中,所以在server.log和控制台中。

综上所述,我们想从去:

application logs + server logs => server.log/console + separate file logs 

要这样:

application logs => seperate file logs 
server logs => server.log/console 

是否有人知道如何实现这一目标? 有没有人以类似的方式配置JBoss服务器?

谢谢你,

问候。

回答

0

如果在WAR/WEB-INF/classesEAR/META-INF中包含log4j.proeprties文件,它应该可以正常工作。如果您在所有地方看到特定于应用程序的日志记录,那么我的猜测是您的log4j.properties文件中配置了一个控制台appender。

+0

删除我的log4j属性文件中的控制台appender后,它仍然不起作用。有任何想法吗 ? –

+0

它是WAR还是EAR部署?你使用log4j作为你的日志框架吗? –

+0

这是一个EAR部署。是的我们是。我们使用log4j和一个自制的日志记录层,它调用log4j日志记录方法和其他日志信息聚合。 –

0

不明白为什么,但log4j的也是标准输出日志,以便JBoss的日志捕获这些日志,并再次追加它们到JBoss控制台和server.log的是这样的:

2017-08-08 15:14:20,304 INFO [stdout] <<My log4j log message>>

我成功的那一刻,以防止这种通过添加代码standalone.xml文件:

<logger category="stdout" use-parent-handlers="false"> 
    <level name="OFF"/> 
</logger> 

这不是一个不好的做法?

谢谢,

+0

如果有什么写入'System.out',那么它不会被记录。这将是唯一的问题。 –

+0

不要认为这会是一个问题,在我们的应用程序中使用System.out非常令人沮丧,但是如果您认为我可以在log4j.properties文件中声明stdout记录器吗?像_log4j.logger.stdout = INFO,outAppender_?只是为了确保我们不会丢失日志并找到System.out调用来删除它们。 –

+0

可能不是。 JBoss EAP使用记录器支持的流替换'System.setOut()'和'System.setErr()'。这是为了防止有人写入其中一个流并丢弃控制台流。 –