我正在使用使用java.util.logging的第三方库(Sphinx)。我一直在尝试几种方法将其日志路由到slf4j。我希望使用的日志库是Log4j2,其配置如下:
Configuration:
properties:
property:
- name: logPath
value: logs
- name: logName
value: flux
- name: rootLevel
value: info
- name: useConsole
value: ALLOW
Appenders:
Console:
name: Console
target: SYSTEM_OUT
ThresholdFilter:
level: ${sys:rootLevel}
onMatch: ${sys:useConsole}
PatternLayout:
pattern: "%d{yyyy.MM.dd G HH:mm:ss,SSS z} %-5p [%t] %C{2} (%F:%L) - %m%n"
RollingRandomAccessFile:
name: File
fileName: "${sys:logPath}/${sys:logName}.log"
filePattern: "${sys:logPath}/${sys:logName}.%d{yyyy-MM-dd}.log"
PatternLayout:
pattern: "%d{yyyy.MM.dd G HH:mm:ss,SSS z} %-5p [%t] %C{2} (%F:%L) - %m%n"
Policies:
TimeBasedTriggeringPolicy:
interval: 1
Loggers:
Root:
level: ${sys:rootLevel}
AppenderRef:
- ref: File
- ref: Console
我申请了在该论坛和其他论坛上可以找到的所有解决方案,但没有成功。除其他外:
我将此Maven依赖项添加到了我的POM中:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.20</version>
</dependency>
我也尝试过在静态块中调用它:
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
并尝试设置系统属性:
System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
在上一次尝试中,我传递了VM参数:
-Djava.util.logging.manager = org.apache.logging.log4j.jul.LogManager
并得到以下异常:
Could not load Logmanager "org.apache.logging.log4j.jul.LogManager"
java.lang.ClassNotFoundException: org.apache.logging.log4j.jul.LogManager
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.util.logging.LogManager$1.run(LogManager.java:195)
at java.util.logging.LogManager$1.run(LogManager.java:181)
at java.security.AccessController.doPrivileged(Native Method)
at java.util.logging.LogManager.<clinit>(LogManager.java:181)
at org.chatbot.stt.SttEngineDemo.<clinit>(SttEngineDemo.java:25)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
难道我做错了什么?我还能尝试什么?
更新:
我还尝试将jul重定向到log4j2,绕过slf4j,因此更改了我的原始策略(感谢@rgoers的建议)。
为了做到这一点,我在下面添加了依赖项:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>2.5</version>
</dependency>
并设置系统属性
java.util.logging.manager
至:org.apache.logging.log4j.jul.LogManager
然后狮身人面像日志消失了。我知道它们没有路由到我的log4j2记录器,因为大多数Sphinx日志都具有INFO级别,因此应该由log4j2处理。因此仍然不正确。
最佳答案
如果要将消息路由到Log4j 2,为什么不只使用Log4j 2的网桥? log4j-jul-2.5.jar
关于java - 将JUL日志记录定向到SLF4J不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36344905/