[解決済み] Spring + Logback(slf4j) jcl-over-slf4jを使用しないロギング
質問
Spring MVC (version 4.1.0) のプロジェクトに Logback と Slf4j を追加する場合、maven の依存関係を以下のように追加することができます。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.21</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
<scope>runtime</scope>
</dependency>
で、commons-logging 依存関係を除外すると、ログファイルにはアプリケーションログに加えて、いくつかの春のイベントの INFO レベルが出力されるようになりました。
[RMI TCP Connection(4)-127.0.0.1][org.springframework.web.context.ContextLoader] - Root WebApplicationContext: initialization started
jcl-over-slf4jを使わずに、pom.xmlでcommons-loggingを除外せずに依存関係を追加すると、アプリケーションログだけが取得されます。
これは私のlogback.xmlです。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_HOME" value="logs" />
<property name="APP_NAME" value="App" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>
</encoder>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
<logger name="org.springframework" level="INFO" appender-ref="FILE"/>
</configuration>
私が理解するところでは、JCLブリッジを使用しない場合、logbackはJCLスプリングインナーログをキャッチしたり、変換したりすることができないため、この現象が発生します。もし私が間違っているならば、訂正してください。
JCL-bridgeを使わずに、logback.xmlを設定して、標準的なspringログイベントを取得することはできますか?
どのように解決するのですか?
チェックする ドキュメント というのも、多くの例題があり、良い情報源だからです。 質問に戻ります。 SpringとJCL。
<ブロッククオートSpringでロギングに必須な依存関係は、Jakarta Commons Logging API (JCL)です。JCL に対してコンパイルし、JCL Log オブジェクトは、Spring Frameworkを拡張するクラスで可視化されます。これは Springのすべてのバージョンで同じロギングを使用することは、ユーザーにとって重要です。 ライブラリ:後方互換性があるため、移行は簡単です。 Springを拡張したアプリケーションであっても、この方法は維持されます。 Springのモジュールの1つを明示的に commons-logging (JCLの標準的な実装)を使用し、その後 他のすべてのモジュールは、コンパイル時にそれに依存します。もし、あなたが 例えば、Mavenで、どこで commons-loggingはSpringから、具体的には という中心的なモジュールです。
ログバックの設定、ここがポイントです。
<ブロッククオートSLF4Jのユーザーの間では、より一般的な選択で、より少ないステップの砂を使用します。 は、Logbackに直接バインドすることで、より少ない依存性を生成することができます。これは は、余分なバインディングのステップを削除します。 ログバックはSLF4Jを実装している を直接使用するため、4つのライブラリではなく、2つのライブラリに依存する必要があるだけです。 (jcl-over-slf4jとlogback) . その場合、次のことも必要かもしれません。 slf4j-apiの依存関係は、他の外部依存関係から除外されます。 なぜなら、そのAPIは1つのバージョンしか必要ないからです。 のクラスパスが必要です。
関連
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】Eclipseで「公開型 <<classname>> は独自のファイルで定義する必要があります」エラー【重複あり
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み] テスト
-
[解決済み] ログバックのルートロギングレベルをプログラムで変更する方法
-
[解決済み】なぜjava.util.loggingを使用しないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】Javaの".class期待値"
-
[解決済み】エラー。Selection does not contain a main type
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません