这是你提到的段落:
此版本包含Java 9的第一个支持以及错误修正和次要增强功能.Log4j API被修改为用于
java.util.ServiceLoader定位Log4j实现,尽管仍支持前一种绑定机制.Log4j jar现在是一个多版本jar,用于提供Java 9特定类的实现.
它没有提及System.LoggerFinder,实际上对于repo(版本2.10)的全文搜索没有提到"LoggerFinder",也没有提到"java.lang.System".因此,我确信Log4J 2.10尚未与JEP 264集成:平台日志记录API和服务.
发布说明似乎指的是Log4J现在ServiceLoader在查找自己的 API 实现时使用API.
如果你确实需要/希望Log4J记录这些消息,你可以像我在这里为SLF4J那样滚动你自己的适配器.你需要的只是Log4J适配器System.Logger和System.LoggerFinder(如果你吝啬一些细节,直接实现)和META-INF/services文件或模块声明,如下所示:
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;
}
Run Code Online (Sandbox Code Playgroud)
使用该工件启动应用程序将导致Log4J获取平台日志消息.
Log4j 2 supports JDK platform logging since version 2.13.2. If you want to use System.Logger with Log4j 2 as a backend, you need to use log4j-jpl adapter:
<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>
Run Code Online (Sandbox Code Playgroud)
After that, your System.Logger will redirect logs to Log4j:
public final class Main {
private static final Logger LOGGER = System.getLogger("");
public static void main(String[] args) {
LOGGER.log(Level.ERROR, "Hello, {}!", "user");
}
}
Run Code Online (Sandbox Code Playgroud)
Output:
11:02:44.736 [main] ERROR - Hello, user!
Run Code Online (Sandbox Code Playgroud)