我正在使用Websphere Application Server上的Primefaces开发JSF项目。 由于Primefaces使用java.util.logging,我使用jul-to-slf4j Bridge将Primefacs日志捕获到我的Log4J日志文件中。
但是使用jul-to-slf4j Bridge,所有java.util.logging消息都将出现在我的日志文件中,包括一般的Websphere消息,例如" Application started"或者"服务器启动"。
是否可以配置jul-to-slf4j,因此它只会重定向特定的消息(例如,从org.primefaces
)到SLF4j的所有内容,并将其余部分保留原样?
答案 0 :(得分:1)
我找到了使用java.util.logging.Filter
的解决方案,过滤器只检查记录器的名称是否以org.primefaces
开头:
对于此解决方案,必须以编程方式设置SLF4JBridgeHandler和Filter, 使用logging.properties文件设置它不会工作。
此外,还有一个人要自己创建SLF4JBridgeHandler,由于Bug是什么,SLF4JBridgeHandler不会开箱即用。
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设置的所有其他处理程序!