Jersey 登录到java.utils日志记录 (JUL)。您可以使用jul-to-slf4j桥将 JUL 日志记录重定向到 SLF4J 。要实现这一点,请将其org.slf4j:jul-to-slf4j作为依赖项添加到您的项目中。如果您使用 Maven:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
要初始化桥,请SLF4JBridgeHandler.install()在应用程序初始化期间调用。
然而,这不会从 JUL 的根记录器中删除任何处理程序,通常会导致重复的日志输出(因为 JUL 仍然会产生输出)。要删除 JUL 处理程序,请调用SLF4JBridgeHandler.removeHandlersForRootLogger().
例如,这些调用可以在应用程序的 main 方法或主类的静态初始化块中完成。
static {
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
}
Run Code Online (Sandbox Code Playgroud)
网桥将只接收 JUL 记录器实际处理的日志(基于日志级别)。为了让 Logback 完全控制日志选择,我们需要确保所有日志级别都由 JUL 处理,以便所有日志都能到达 Logback 记录器。这是通过将 JUL 记录器设置为可能的最低日志级别来完成的:
static {
java.util.logging.LogManager.getLogManager().reset();
java.util.logging.Logger.getLogger("global").setLevel(Level.FINEST);
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
}
Run Code Online (Sandbox Code Playgroud)
这确实意味着所有日志都将由 JUL 记录器和网桥处理,从而导致相当大的性能损失。Logback 对此有一个解决方案:通过添加LevelChangePropagator上下文侦听器,Logback 的日志级别将传播到 JUL 的记录器。LevelChangePropagator也可以从前面的代码块执行 JUL 的日志管理器的重置。要配置所有这些,请将以下内容添加到您的logback.xml:
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
Run Code Online (Sandbox Code Playgroud)
使用此配置,您可以选择此答案中的第一个初始化块,因为第二个块的前两个语句现在由上下文侦听器处理。准确地说,实际上有一个小的区别:该LogManager.reset()方法重置所有日志级别并删除除根记录器之外的所有处理程序,而上下文侦听器上的“resetJUL”选项仅重置日志级别。
总结一下:
jul-to-slf4j依赖LevelChangePropagator上下文侦听器添加到您的 Logback 配置中| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |