個人的に学習ビデオを組み合わせて簡単に理解して記録します
slf4j ログ ファサードにどのログ実装が使用されるかは、pom ファイルに依存関係をインポートする順序によって決まり、先頭にある人がログ実装として使用される人を使用します。
core --slf4j 依存関係
<!--slf4j 核心依赖--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency>
1. 入門ケース
他のログ フレームワークを統合しないことに基づいて、slf4j は組み込みのログ フレームワーク slf4j-simple を使用し、依存関係を別途導入する必要があります。
<!--slf4j 自带的简单日志实现 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>
ディスプレイ効果
1.1 文字列の連結をプレースホルダに置き換えることで、より柔軟なログ情報を動的に出力することも可能
Logger logger = LoggerFactory.getLogger(SLF4JTest01.class); String name = "zs"; int age = 23; //{},这个括号就是占位符 logger.info("学生信息-姓名:"+name+";年龄:"+age); logger.info("学生信息-姓名:{},年龄:{}",new Object[]{name,age}); logger.info("学生信息-姓名:{},年龄:{}",name,age);
表示されるログ情報
2. サードパーティのログ フレームワークを統合する前に、slf4j の公式 Web サイトを確認してください。
2.1 slf4j ログ ファサードには、ログ実装をバインドする 3 つの状況があります
1. ログ実装をバインドしないことに基づいて、ログ ファサードは機能を実装できません。slf4j-simple は slf4j 公式 Web サイトによって提供されるログ実装です。依存関係をインポートすると、自動的に slf4j ログ ファサードにバインドされます。そうでない場合は、slf4j 公式 Web サイトが提供するログ実装です。インポートされた場合、実装は提供されません。
2. Logback と simple (nop を含む) は、どちらも slf4j ログ ファサードのタイムラインの背後で提供されるログ実装であるため、設計は slf4j に完全に準拠しており、依存関係をインポートするだけでシームレスに接続できます。すべてのログを印刷します。
3. log4j と JUL はどちらも slf4j ログ ファサードのタイムラインの前にあるログ実装であるため、API は slf4j の設計に従いませんが、ブリッジング テクノロジーを適応させることでログ ファサードとの接続を完了できます。
ログバック依存関係
<!-- logback依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
nop依存
<!-- 导入nop -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.25</version>
</dependency>
//--------------------------分割线----------------------------------------------------------
logback、simple、および nop は、slf4j ログ ファサード テクノロジの出現に属しているため、依存関係を直接インポートすることによってのみ使用できます。
3. 現時点で、log4j ログ実装を使用する必要がある場合は、機能を実現するためにブリッジング テクノロジを使用し、アダプターをバインドし、2 つの依存関係をインポートする必要があります。
アダプターの依存関係と log4j の依存関係
<!-- 导入log4j适配器依赖 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <!-- 导入log4j依赖 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
log4j 構成ファイルも追加する必要があります。
#配置根节点logger log4j.rootLogger=trace,console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.conversionPattern=[%-10p]%r %c%t%d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
ログ表示情報
4. JUL ログ実装 - slf4j タイムライン前のログ実装に属しており、アダプターの依存関係を追加する必要があります。JUL は JDK に組み込まれているため、依存関係を手動でインポートする必要はありません
<!--导入JUL的适配器依赖,因为JUL是JDK内置的,所以不用导入JUL的依赖--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version>1.7.25</version> </dependency>
ログ表示情報
備考: このような赤枠の警告メッセージが表示された場合は、複数のログ実装がインポートされていますが、デフォルトでは 1 つ (順番に最初のもの) のみが使用され、コメントアウトされている場合は表示されません。ただし、実際の運用環境では、通常、バインドされるログ実装は 1 つだけであり、複数のログ実装がバインドされている場合は、冗長な警告メッセージが表示されます。
5.デモ
要件: プロジェクトでは log4j が使用されています。現在、log4j はプロジェクトのニーズを満たすことができません。コードを変更せずにこの問題を解決するには、slf4j+logback にリファクタリングする必要があります。
5.1 log4j をコメントアウトします。この時点で、コードはエラーを報告する必要があります。次に、slf4j と logback の依存関係を追加し、次にブリッジの依存関係を追加します。ブリッジは、プロジェクト内のログの再構築の問題を解決します。プロジェクト API 内の以前のログ。ブリッジを通じて slf4j の実装に変換できます。
<!--slf4j 核心依赖--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!--桥接器--> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>1.7.25</version> </dependency> <!-- logback依赖 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
再構築前のログ情報
リファクタリングされたログ情報
リファクタリング後は、log4j パッケージ下のコンポーネント リソースが使用されているように錯覚しますが、実際のログ実装は slf4j ファサード + logback ログ実装であり、これはブリッジによってもたらされる効果です。
知らせ:
ブリッジが結合された後は、アダプターを結合する必要はありません
ブリッジとアダプターは同時に接続できません
ブリッジがアダプターの上にある場合、実行時にエラーが報告されます。
ブリッジがアダプターの下にある場合、ブリッジは実行されず、意味がありません