如何将java.util.logging发送到log4j2?

bbl*_*coe 8 java logging log4j log4j2

我正在开发一个使用NetBeans平台的项目.在底层,NetBeans使用该java.util.logging框架.

我想通过结合拦截这些日志调用java.util.logginglog4j2.这可能吗?

之前的问题已经被问到类似,但具体log4j而不是log4j2!

Rem*_*pma 23

更新2014/9/12:从版本2.1开始,Log4j 2包含一个不需要SLF4J 的JUL网桥.

无需自定义代码.两件事情:

  1. 将以下jar放入类路径:log4j-api-2.x,log4j-core-2.x和log4j-jul-2.x.

  2. 系统属性设置java.util.logging.managerorg.apache.logging.log4j.jul.LogManager 任何呼叫到日志管理或记录仪由前

Log4J2 FAQ页面直观地显示了依赖关系:http://logging.apache.org/log4j/2.x/faq.html#which_jars


bbl*_*coe 2

我找到了解决方案:

NetBeans 平台以org.netbeans.*命名空间命名记录器。为了路由 NetBeans 日志调用,我只需创建一个Handler并将其注册到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
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

请务必注册新的记录器Handler并在必要时禁用父记录器:

Logger logger = Logger.getLogger("org.netbeans");
logger.addHandler(new CustomerHandler());
logger.setUseParentHandlers(false);
Run Code Online (Sandbox Code Playgroud)