JUL至SLF4J仅适用于特定班级 [英] jul-to-slf4j for specific classes only
本文介绍了JUL至SLF4J仅适用于特定班级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在Websphere Application Server上开发一个带有PrimeFaces的JSF项目。 由于PrimeFaces使用的是java.util.Logging,因此我使用Jul-to-slf4j桥将Primefacs日志捕获到我的Log4J日志文件中。
但使用Jul-to-slf4j Bridge,所有的java.util.Logging消息都将在我的日志文件中,包括诸如"应用程序已启动"或"服务器已启动"之类的一般Websphere消息。
是否可以将jul-to-slf4j配置为仅将特定消息(例如,从org.primefaces
的所有消息)重定向到SLF4j,并保持其余消息不变?
推荐答案
我使用java.util.logging.Filter
找到了一个解决方案,筛选器只检查记录器的名称是否以org.primefaces
开头:
SLF4JBridgeHandler slf4jBridgeHandler = new SLF4JBridgeHandler(){
@Override
public void publish(LogRecord record) {
if (getFilter() != null && !getFilter().isLoggable(record)) {
return;
}
super.publish(record);
}
};
Filter filter = new Filter() {
@Override
public boolean isLoggable(LogRecord record) {
String loggerName = record.getLoggerName();
boolean loggable = loggerName != null && (loggerName.startsWith("org.primefaces"));
return loggable;
}
};
slf4jBridgeHandler.setFilter(filter);
java.util.logging.LogManager.getLogManager().getLogger("").addHandler(slf4jBridgeHandler);
不要调用SLF4JBridgeHandler.removeHandlersForRootLogger()
,因为这将删除Websphere设置的所有其他处理程序!
这篇关于JUL至SLF4J仅适用于特定班级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文