Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将java.util.logging发送到log4j2?_Java_Logging_Log4j_Log4j2 - Fatal编程技术网

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

如何将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 在

我正在从事一个使用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


  • 在调用LogManager或Logger之前,将系统属性
    java.util.logging.manager
    设置为
    org.apache.logging.log4j.jul.LogManager

  • Log4J2 FAQ页面直观地显示了依赖关系: 我找到了一个解决方案:

    NetBeans平台在
    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,请参见。