我们正在努力将我们的应用程序从WebSphere迁移到JBoss EAP 6.4。我在互联网上读到,自JBoss EAP 6.x起,JBoss之前使用自己的日志记录框架JBoss Logging而不是log4j。
我们已经有一个log4j.properties文件用于特定于应用程序的日志,它根据日志级别(log-error.log,log-info.log,...)将日志存储在单独的文件中,但实际上,它们也是登录到控制台和server.log文件。
一方面,我们希望只使用现有的log4j.properties配置文件记录应用程序日志,但也要阻止它们在server.log和console中登录。
另一方面,我们希望使用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 :(得分:2)
不明白为什么,但log4j也登录stdout,所以JBoss Logging捕获这些日志并将它们再次附加到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>
这不是一种不好的做法吗?
谢谢,
答案 1 :(得分:1)
如果您在log4j.proeprties
或WAR/WEB-INF/classes
中添加了EAR/META-INF
个文件,那么它应该可以正常运行。如果您在所有地方都看到了特定于应用程序的日志记录,那么我的猜测就是您在log4j.properties
文件中配置了控制台appender。
答案 2 :(得分:1)
我花了几天时间解决这个问题,我认为我有一些可行的方法。我正在使用EAP 6.4。
首先,上面提到的有关将代码添加到 standalone.xml 的解决方案使下面所述的解决方案的输出在控制台中更易于阅读。如果不执行此步骤,则控制台中会提供一些额外的换行符。
我所做的是创建一个log4j.xml
文件,但我 不 将其命名为log4j.xml
。对于我的2个应用程序,我将其称为servicelog4j.xml
。这意味着JBoss将找不到它。
然后,当我创建log4j记录器时,我将执行以下操作(这在名为Log4jLogger
的类的静态方法中):
public static Logger getLogger(Class aClass) {
ClassLoader classLoader = Log4jLogger.class.getClassLoader();
InputStream log4JStream = classLoader.getResourceAsStream("servicelog4j.xml");
if (log4JStream != null) {
new DOMConfigurator().doConfigure(log4JStream, LogManager.getLoggerRepository());
}
Logger log = Logger.getLogger(aClass);
return log;
}
现在,文件servicelog4j.xml
在我的Eclipse项目的resources文件夹中,因此在部署应用程序时,它将被复制到WEB-INF/classes/servicelog4j.xml
。
该文件的内容是标准的log4j文件。我有一个标准的文件附加程序和一个控制台附加程序。每个应用程序的文件附加器指向不同的文件。
要在控制台(和文件)中显示仅针对我的类的调试代码,请将以下内容放入servicelog4j.xml
中(因为我所有的代码都在软件包com.mycompany.mypackage
中):>
<logger name="com.mycompany.mypackage">
<level value="debug" />
<appender-ref ref="CONSOLE" />
</logger>
<root>
<priority value ="info" />
<appender-ref ref="FILE" />
</root>
通过上述配置,我将在Eclipse控制台中获取所有消息以及该文件。如果我只删除<logger>
部分,那么调试消息将无处可寻,这是我在生产中想要的。