我正在 Websphere Application Server 上使用 Primefaces 开发 JSF 项目。
由于 Primefaces 使用 java.util.logging,因此我使用 jul-to-slf4j Bridge 将 Primefacs 日志捕获到我的 Log4J 日志文件中。
但是使用 jul-to-slf4j Bridge,所有 java.util.logging 消息都将位于我的日志文件中,包括常规 Websphere 消息,例如“应用程序已启动”或“服务器已启动”。
是否可以配置 jul-to-slf4j,以便它仅重定向特定消息(例如,来自org.primefaces
) 到 SLF4j 并保持其余部分不变?
我找到了一个解决方案,使用java.util.logging.Filter
,过滤器只是检查记录器的名称是否以以下开头org.primefaces
:
对于此解决方案,必须以编程方式设置 SLF4JBridgeHandler 和 Filter,
使用logging.properties 文件设置它是行不通的。
另外,必须自己创建 SLF4JBridgeHandler,因为 afaikBug http://jira.qos.ch/browse/SLF4J-343,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 设置的所有其他处理程序!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)