私は何か間違っているのですか、これは本当に予想される動作ですか?私に説明してみましょう:Guice注入問題がSLF4J経由でファイルに出力されない
私のクラスパス(または任意の他の結合の問題)に何か問題がある場合は、GuiceのDIでJavaプログラムを実行しようとすると、私は次のようになります例外を得ることを期待:
Exception in thread "main" com.google.inject.CreationException: Guice creation errors:
1) Error injecting constructor, java.lang.NoClassDefFoundError: Could not initialize class
<any class here>
これは実際に私にクラスパスの問題があることを知らせてくれます。私はGuiceについて愛していることの一つです(何が間違っているのか正確に伝えています)。
SLF4J(特にログバック実装)を使用してこのプログラムをコマンドライン経由で実行すると、コンソール出力でのみエラーが発生します。すべてのコンソール出力を/ dev/null(たとえば)に変換する方法でこれを実行すると、例外がファイルに出力されることはありませんので、私はそれが起こっているとは言えません。私はエラーの前に私が望むようにログすることができるので、それはその点で悪い構成の問題ではありません。私はjcl-over-slf4jとlog4j-over-slf4j jarsをクラスパスに追加して、無駄なものを拾い上げようと試みました。
私は適切なキーワードを使用していないかもしれませんが、私は同じ問題を報告している誰かを見つけることができないので、これが自分の設定やGuiceの "機能"に問題があるかどうかはわかりません。
これは基本的な問題ですか、これは構成上の問題かGuiceの "機能" /バグで、私はログファイルにバインディング例外を見ることができませんか?私はGuiceのは、その実装のためのJavaロガーを使用していることを読んだ
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>debug.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>debug.%i.log.zip</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>2MB</MaxFileSize>
</triggeringPolicy>
</appender>
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="ASYNC_CONSOLE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="STDOUT" />
</appender>
<root level="debug">
<appender-ref ref="ASYNC_FILE" />
<appender-ref ref="ASYNC_CONSOLE" />
</root>
</configuration>
ありがとう、私はあなたが言及したSOの質問からいくつかのコードを取得する迅速なテストを行うことができた、それは私がファイルにエラーを取得することができます。ログファイルに表示されないファイルに関する私の最大の問題は、スレッドを作成するクラスによってプログラムが実際に終了しないことです。私はコンソール出力がないので、何かが期待どおりに動作しない理由を診断する方法がありません(標準エラーにリダイレクトするまで)。 – wrestang