将log4j 2.10.0与Java 9 System.Logger一起使用

时间:2018-01-05 06:45:33

标签: java logging log4j log4j2 java-9

如何设置Java 9以便System.Logger实例写入log4j 2.10.0,而不是写入JUL?

3 个答案:

答案 0 :(得分:7)

这是您所指的段落:

  

此版本包含Java 9的第一个支持以及错误修正和次要增强功能。 Log4j API被修改为使用java.util.ServiceLoader来定位Log4j实现,尽管仍支持前一种绑定机制。 Log4j jar现在是一个多版本jar,用于提供Java 9特定类的实现。

它没有提及System.LoggerFinder实际上the repo(版本2.10)的全文搜索没有提及" LoggerFinder&#34 ;没有什么有希望的" java.lang.System"。因此,我确定Log4J 2.10尚未与JEP 264: Platform Logging API and Service集成。

发行说明似乎指的是Log4J现在在查找自己的 API的实现时使用ServiceLoader API。

自己动手

如果您确实需要/希望Log4J记录这些消息,您可以滚动自己的适配器as I did here for SLF4J。您只需要System.LoggerSystem.LoggerFinder的Log4J适配器(如果您吝啬一些细节,可以直接实现)和META-INF/services文件或类似以下的模块声明:< / p>

module org.slf4j.platform {
    // put the right module name here
    requires log4j;
    provides java.lang.System.LoggerFinder
        // put the right class name here
        with org.log4J.Log4JSystemLoggerFinder;
}

使用该工件启动应用程序将导致Log4J获取平台日志消息。

答案 1 :(得分:2)

为什么不简单地使用Log4j2的Java util logging adapter将所有JUL日志记录路由到Log4j2?

要启用此功能,请将系统属性java.util.logging.manager设置为org.apache.logging.log4j.jul.LogManager,然后将log4j-jul添加到您的依赖项。

答案 2 :(得分:1)

Log4j 2 支持 JDK 平台日志 since version 2.13.2。如果要将 System.Logger 与 Log4j 2 一起用作后端,则需要使用 log4j-jpl 适配器:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${replace.with.right.version}</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${replace.with.right.version}</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jpl</artifactId>
    <version>${replace.with.right.version}</version>
    <scope>runtime</scope>
</dependency>

之后,您的 System.Logger 会将日志重定向到 Log4j:

public final class Main {
    private static final Logger LOGGER = System.getLogger("");

    public static void main(String[] args) {
        LOGGER.log(Level.ERROR, "Hello, {}!", "user");
    }
}

输出:

11:02:44.736 [main] ERROR  - Hello, user!