java.util.loggingを使用するサードパーティライブラリ(Sphinx)を使用しています。私はslf4jにログを送るいくつかの方法を試してきました。私は成功せず、私はこれと他のフォーラムで見つけることができるすべてのソリューションを適用SLF4JへのJULログの出力が正しく行われない
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
:私が使用したいのロギングライブラリは次のように構成されてLog4j2、です。なかでも:
私はPOMにこのMavenの依存関係を追加しました:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.20</version>
</dependency>
を私はまた、静的ブロックでこれを呼び出してみました:
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
そして、システムプロパティを設定してみました:
私の最後の試みでは、私は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)
私が何か間違ったことをやっているの?それ以外に何ができますか?
更新:
私はまた、それゆえ私の元の戦略(提案@rgoersに感謝を)変え、SLF4Jをバイパスし、log4j2に7月リダイレクトしてみました。 これを行うためには、私は以下の依存関係を追加しました:org.apache.logging.log4j.jul.LogManager
そして、スフィンクスログがなくなっている:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>2.5</version>
</dependency>
ともシステムプロパティ java.util.logging.manager
を設定します。私は彼らが私のlog4j2ロガーにルーティングされていないことを知っています。なぜなら、ほとんどのSphinxログはINFOレベルでlog4j2によって処理されるべきだからです。それでも正しいわけではありません。
まだエラーメッセージが表示されますが、それは助けになります。更新された質問をご覧ください。 – Sergio
VMパラメータが何らかの形で間違って指定されています。エラーメッセージを見てください - それは "D"、キーと=を含んでいます。 System.setPropertyを使用する場合は、何かがjulを使用する前に設定されていることを確認する必要があります。 – rgoers
ここに示すように、-Dkey = valueという構文に従ってパラメータを渡しています。http://stackoverflow.com/questions/862391/how-to-pass-the-d-system-properties-while-testing-on-日食 – Sergio