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

2022-09-03 17:44:13

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

我想通过绑定到 来拦截这些日志调用。这可能吗?java.util.logginglog4j2

之前的问题已经问过,但很具体,但不是!log4jlog4j2


答案 1

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

不需要自定义代码。两件事:

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

  2. 将系统属性设置为在对 LogManager 或 Logger 进行任何调用之前java.util.logging.managerorg.apache.logging.log4j.jul.LogManager

Log4J2 常见问题解答页面直观地显示依赖项:http://logging.apache.org/log4j/2.x/faq.html#which_jars


答案 2

我找到了一个解决方案:

NetBeans 平台在命名空间之后命名记录器。要路由 NetBeans 日志调用,我只需创建一个并将其注册到记录器:org.netbeans.*Handlerorg.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
    {
    }
}

如有必要,请务必注册新的父记录器并禁用父记录器:Handler

Logger logger = Logger.getLogger("org.netbeans");
logger.addHandler(new CustomerHandler());
logger.setUseParentHandlers(false);

推荐