最近、ログシステムを使ってプロジェクトを処理する際に、非常に奇妙な問題が発生したので、ログシステムの種類と内部接続を深く理解し、全体のポイントをみんなと共有します!私が最初にそれを学んだとき、理解が浅くなることは避けられないことを認めなければなりません。偉大な神が私を正し、学び、共に進歩することを願っています。
開発中の一般的なログフレームワークには、log4j、slf4j、およびcommons-loggingが含まれます。
1.まず、これらのタイプのログに関連する知識を紹介します
コモンズ-ログログコンポーネント
Common-loggingは、apacheによって提供される一般的なロギングインターフェイスです。ユーザーは、log4jやjdk独自のロギングなど、特定の実装としてサードパーティのログコンポーネントを自由に選択できます。Common-loggingは、プログラムが動的検索メカニズムを介して実行されているときに実際に使用されるログライブラリを自動的に検出します。もちろん、common-logging内にSimple loggerの単純な実装がありますが、その機能は非常に弱いです。したがって、common-loggingは通常log4jと組み合わせて使用されます。これを使用する利点は、コードがlog4jではなくcommon-loggingに依存することです。これにより、特定のロギングソリューションとの直接結合が回避されます。必要に応じて、ロギングによって実装されるサードパーティライブラリを変更できます。
common-loggingを使用した共通コード:
package www.supermaster.cn.utils.shiro;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @ClassName: MyRealm
* @Description:[Shiro认证模拟]
* @author: Lance Ting
* @date: 2018年12月12日 下午9:04:27
*/
public class MyRealm
{
/**
* 日志设置
*/
private static Log logger = LogFactory.getLog(MyRealm.class);
}
pomファイルで構成する
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
また、log4j.xmlはクラスパスで構成され、commons-loggingはlog4jを通常どおりに使用し、コードはlog4jコードに依存する必要はありません。
Slf4jログコンポーネント
slf4jのフルネームは、JAVAのSimple Logging Facade、java simplelogfacadeです。Apache Common-Loggingと同様に、これはさまざまなロギングフレームワークによって提供されるファサードパッケージ(実装ではなくインターフェイス)です。デプロイメント中に構成を変更することなく、ログ実装ソリューションにアクセスできます。ただし、実際のログライブラリはコンパイル時に静的にバインドされます。SLF4Jを使用するときに、特定のログ実装を使用する必要がある場合は、SLF4J jarパッケージ(さまざまなブリッジパッケージ)の正しいセットを選択する必要があります。
slf4jを使用する一般的なコード:
package www.supermaster.cn.utils.shiro;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @ClassName: MyRealm
* @Description:[]
* @author: Lance Ting
* @date: 2018年12月12日 下午10:14:21
*/
public class MyRealm extends AuthorizingRealm
{
/**
* 日志设置
*/
private static Logger logger = LoggerFactory.getLogger(MyRealm.class);
}
pomファイルで構成する
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
slf4j静的バインディングの原則:SLF4Jは、コンパイル時にorg.slf4j.impl.StaticLoggerBinderをバインドします。このクラスは、特定のログスキームへのバインディングアクセスを実装します。slf4jに基づく実装には、このクラスが必要です。例:org.slf4j.slf4j-log4j12-1.5.6:log4jへの適応を提供します。
slf4jインターフェイスを使用する場合、バインダーとブリッジが含まれます。ログはブリッジです。slf4j-log4j12-バージョンslf4jはlog4jにバインドされ、jcl-over-slf4jはjclへのインターフェイスを使用します。slf4jインターフェイスはバインディングslf4jを使用します。ログ。
SLF4Jの一般的なコロケーションは、slf4j-api、JCLブリッジ、java.util.logging(JUL)ブリッジ、log4jバインダー、およびlog4jの5つのjarをCLASS_PATHに配置することです。原則は、slf4jのさまざまなブリッジを使用してすべてのログインターフェイスをslf4jインターフェイスにブリッジし、特定のslf4jバインダーとログ実装者を選択して、1つのログ実装者を使用してすべてのログを統一して出力するという目的を達成することです。
Log4jログコンポーネント
Log4jはApacheのオープンソースプロジェクトです。Log4jを使用することで、コンソール、ファイル、GUIコンポーネント、さらにはソケットサーバー、NTイベントロガー、UNIXSyslogデーモンなどへのログ情報配信の宛先を制御できます。ユーザーは制御することもできます。各ログの出力形式。各ログ情報のレベルを定義することにより、ユーザーはログ生成プロセスをより詳細に制御できます。これらは、プログラムコードを変更することなく、構成ファイルを介して柔軟に構成できます。
ログバックログコンポーネント
Logbackは、log4jの創設者によって設計されたもう1つのオープンソースの日記コンポーネントです。
ログバックは現在、logback-core、logback-classic、logback-accessの3つのモジュールに分かれています。
- logback-coreは、他の2つのモジュールの基本モジュールです。
- logback-classicは、log4jの改良版です。さらに、logback-classicはSLF4J APIを完全に実装しているため、log4jやJDK14Loggingなどの他のダイアリーシステムに簡単に変更できます。
- logback-accessアクセスモジュールはサーブレットコンテナと統合され、Httpを介して日記にアクセスする機能を提供します。
2.slf4jとcommon-loggingの比較
slf4jとcommons-loggingはどちらも、ログコンポーネントのログインターフェイスであり、ログの使用は、特定の実装を借用することによってのみ実現できます。
Common-loggingは、プログラムが動的検索メカニズムを介して実行されているときに実際に使用されているログライブラリを自動的に検出します。ClassLoaderを使用して基になるログライブラリを検索してロードするため、OSGIのさまざまなプラグインが独自のClassLoaderを使用するため、OSGIなどのフレームワークは正しく機能しません。OSGIのこのメカニズムは、プラグインが互いに独立していることを保証しますが、ApacheCommon-Loggingが機能しなくなります。
slf4jは、コンパイル時に実際のログライブラリに静的にバインドされるため、OSGIで使用できます。さらに、SLF4Jはパラメーター化されたログ文字列をサポートし、文字列スプライシングのパフォーマンスの低下を減らすために書き込む必要があったif(logger.isDebugEnable())を回避します。これで直接書き込むことができます:logger.debug( "current user is :{}”、ユーザー)。メッセージを表示するかどうかを判断できるようになるまで、メッセージの組み立ては延期されましたが、パラメータを取得するためのコストは免れませんでした。
3.Log4jとLogBackの比較
Log4jとLogbackはどちらもロガーの実装です
LogBackは、ユニバーサルで信頼性が高く、高速で柔軟なログフレームワークとして、Log4jおよびSLF4Jの代わりに使用され、新しいログシステムの完全な実装を形成します。
LogBackは、優れたパフォーマンスを発揮すると主張しています。「ログステートメントを記録するかどうかを決定する操作など、特定の重要な操作により、パフォーマンスが大幅に向上しました。この操作には、LogBackで3ナノ秒、Log4J秒で30ナノ秒が必要です。LogBackもロガーの作成が高速:13マイクロ秒、Log4Jでは23マイクロ秒、さらに重要なことに、既存のロガーを取得するのに94ナノ秒しかかからないのに対し、Log4Jでは2234ナノ秒で時間が1/23に短縮されます。 7月までも重要です。」
さらに、すべてのLOGBackドキュメントは完全に無料で提供されます。Log4Jは一部の無料ドキュメントのみを提供し、ユーザーは有料ドキュメントを購入する必要があります。
4.Slf4jの一元化された組み合わせ形式
(1)slf4j + log4j構成フォーム
<!-- slf4j interface-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<!-- jcl bridge to slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.6.1</version>
</dependency>
<!-- slf4j binding to log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
<!-- log4j recorder -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
(2)slf4j +ログバック構成フォーム
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
(3)slf4j + logback + jclブリッジ構成フォーム
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.6.1</version>
</dependency>
https://blog.csdn.net/dgxin_605/article/details/84981033を転載するためのソースを示してください、あなたのサポートに感謝します!