Ich verwende eine Drittanbieter-Bibliothek (Sphinx), die java.util.logging verwendet. Ich habe mehrere Ansätze versucht, um seine Protokolle zu slf4j zu routen. Die Logging-Bibliothek, die ich verwenden möchte, ist Log4j2, die wie folgt konfiguriert ist:Directing JUL Protokollierung auf SLF4J funktioniert nicht
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
ich ohne Erfolg angewendet alle Lösungen, die ich auf diesem und anderen Foren finden konnten. Unter anderem:
habe ich diese Maven Abhängigkeit meine POM:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.20</version>
</dependency>
ich auch mit Aufruf dieser in einem statischen Block versucht:
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
und versuchte, die System-Eigenschaft:
System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
In meinem letzten Versuch habe ich das VM-Argument übergeben:
-Djava.util.logging.manager = org.apache.logging.log4j.jul.LogManager
und bekam die Ausnahme unter:
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)
Mache ich etwas falsch? Was kann ich noch versuchen?
Update:
Ich habe auch versucht Umleitung Juli log4j2, slf4j umgehen, daher meine ursprüngliche Strategie zu ändern (Danke für die Anregung @rgoers). Um dies zu tun, habe ich die Abhängigkeit unter:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>2.5</version>
</dependency>
und auch die Eigenschaft System java.util.logging.manager
einzustellen: org.apache.logging.log4j.jul.LogManager
Dann werden die Sphinx Protokolle verschwunden. Ich weiß, dass sie nicht zu meinem log4j2-Logger geroutet werden, da die meisten Sphinx-Logs die Level-INFO haben und sie von log4j2 verarbeitet werden sollten. Also immer noch nicht korrekt.
es irgendwie geholfen, obwohl ich noch eine Fehlermeldung sehe. Bitte sehen Sie meine aktualisierte Frage. – Sergio
Ihr VM-Parameter ist irgendwie falsch angegeben. Sehen Sie sich die Fehlermeldung an - sie enthält das "D", den Schlüssel und das =. Wenn Sie System.setProperty verwenden, müssen Sie sicherstellen, dass es gesetzt ist, bevor jul verwendet wird. – rgoers
Ich übergebe den Parameter nach der Syntax -Dkey = value, wie hier gezeigt: http://stackoverflow.com/questions/862391/how-to-pass-the-d-system-properties-which-testing-on- Finsternis – Sergio