如何将java.util.logging发送到log4j2?
我正在从事一个使用NetBeans平台的项目。在幕后,NetBeans使用如何将java.util.logging发送到log4j2?,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,我正在从事一个使用NetBeans平台的项目。在幕后,NetBeans使用java.util.logging框架 我想通过将java.util.logging绑定到log4j2来拦截这些日志调用。这可能吗 之前提出的问题与此类似,但具体针对的是log4j,而不是log4j2 更新2014/9/12:从版本2.1开始,Log4j 2包含不需要SLF4J的 不需要自定义代码。两件事: 在类路径中放置以下JAR: log4j-api-2.x、log4j-core-2.x和log4j-jul-2.x 在
java.util.logging
框架
我想通过将java.util.logging
绑定到log4j2
来拦截这些日志调用。这可能吗
之前提出的问题与此类似,但具体针对的是
log4j
,而不是log4j2
更新2014/9/12:从版本2.1开始,Log4j 2包含不需要SLF4J的
不需要自定义代码。两件事:
java.util.logging.manager
设置为org.apache.logging.log4j.jul.LogManager
org.NetBeans.*
名称空间后命名记录器。为了路由NetBeans日志调用,我只需创建一个处理程序
,并将其注册到org.NetBeans
记录器:
public class CustomHandler extends Handler
{
@Override
public void publish(LogRecord record)
{
// Re-direct log calls here (e.g. send record to Log4j2 logger).
}
@Override
public void flush()
{
}
@Override
public void close() throws SecurityException
{
}
}
确保注册新的处理程序
,并在必要时禁用父记录器:
Logger logger = Logger.getLogger("org.netbeans");
logger.addHandler(new CustomerHandler());
logger.setUseParentHandlers(false);
我从未想过要使用SLF4J。我有一个Log4j2的定制包装器作为外观。我找到了一个解决方案,并将发布它。“在给LogManager或Logger打任何电话之前”。这是最大的缺点(尽管这是由于java.util.logging很难提供替代实现)。如果您的项目是其他项目的依赖项,则无法轻松保证在启动时设置系统属性。另一种方法是转到java.util.logging→ SLF4J→ log4j2;这即使在启动后也有效,但可能不是很有效。它还遇到了SLF4J JUL bridge帽子的问题,因为它只是一个JUL处理程序,而不是一个LogManager。Log4j 2实际上有一个类似于SLF4J的
Log4jBridgeHandler
类,但它还没有被后端口到2.x,请参见。