Javaロギングはじめに(4)-Log4j2

Log4j2は、その前身のLog4j 1.1と比較のLog4jのアップグレードバージョンで修正いくつかの固有の問題LogbackアーキテクチャながらLogbackで提供される多くの改善が著しい改善を提供し、ご利用いただけます。

Javaの1.8.0_191、log4jの2.12.1:ソフトウェアのバージョンに本明細書中で使用される、コンテンツのLog4j2多くは、この論文は、そのシンプルで実用的な方法を紹介します。

1、コンフィギュレーション

1.1、コンフィギュレーションをロードします

Log4j2は自動的に初期化期間を設定するには、設定ファイルを見つけることができます。次のようにあなたが見つけるまで、コンフィギュレーション・ファイルを見つけるための優先度に応じて、優先順位は次のとおりです。

log4j.configurationFile属性に対応する1、検索システム・コンフィギュレーション・ファイル
2、log4j2-test.propertiesのCLASSPATHを見て
。3、ルックlog4j2-test.yamlまたはCLASSPATHでlog4j2-test.yml
。4、log4j2テストクラスパスを見てください。 JSON-test.jsnまたはlog4j2
。5、のtest.xml-log4j2クラスパスを見て
。6、またはlog4j2.yaml log4j2.ymlにクラスパスを見つける
。7、または参照log4j2.json log4j2.jsnクラスパス
。8、クラスパスを見つけますlog4j2.xml
9、上記の手順は、コンソールへのコンフィギュレーション・ファイルは、デフォルトの設定、ログ出力を見つけることができない場合。

1.2、自動的に構成を更新

設定はmonitorinterval]の(秒)を設定することにより、コンフィギュレーション・ファイルからロードされている場合は、パラメータは、新しくロードされた設定から変更した場合、自動的にlog4j2チェックファイルを変更することができます。ファイル変更ログとタイミングが最後の検査以降はMonitorInterval時間以上であるかどうかを確認してください。

<?xml version = "1.0"エンコード= "UTF-8"?> 
<構成にMonitorInterval = "30"> 
... 
</構成>

2、アペンダ

2.1 ConsoleAppender

<コンソール名= "STDOUT"> 
</コンソール>

コンソールへのログ出力、次のような共通のパラメータ:

フィルタフィルタ
レイアウト依頼者
名を出力先の名前
目標SYSTEM_OUT又はSYSTEM_ERR;デフォルトSYSTEM_OUT。

2.2、FileAppender

<ファイル名= "ファイル" fileNameに= "D:\ TEMP \ a.log"> 
</ファイル>

:出力ログファイル、次のような共通のパラメータに

フィルターフィルター
fileNameにファイル名の
レイアウト依頼者
名出力先名

2.3、RollingFileAppender

<RollingFile名= "RollingFile" fileNameに= "D:\ TEMP \ B.LOG" filePattern = "D:\ TEMP \ $$ {日:YYYY-MM} \ B-%D {MM-DD-YYYY} - % i.log "> 
</ RollingFile>

特定の戦略履歴ログファイルによって生成された出力ログ・ファイルまでスクロールし、最新の履歴ファイルの固定数を保持、次のように一般的なパラメータは次のとおりです。

フィルタフィルタ
fileNameにファイル名
filePattern履歴ログファイル名生成戦略は、日付の書式設定をサポート:$$ {日:YYYY-MM }%のD {MM-DD-YYYY}; 構成番号:%Iの
レイアウト依頼者
名出力先名前
ポリシー履歴ログファイルの生成戦略
DefaultRolloverStrategyデフォルトポリシー

2.3.1、ポリシー

以下の戦略:

<ポリシー> 
  <OnStartupTriggeringPolicy /> 
  <SizeBasedTriggeringPolicyサイズ= "20メガバイト" /> 
  <TimeBasedTriggeringPolicy /> 
</ポリシー>

履歴ログファイルが生成されたときに起動OnStartupTriggeringPolicy、そのパラメータ:

minSizeログファイルは、起動時に生成された履歴ログファイル値よりも大きい場合、デフォルトは1で、空のログファイル生成履歴ログファイルを防ぐために

ログファイルがはるかに達したときにSizeBasedTriggeringPolicy、履歴ログファイルには、そのパラメータを生成されます。

サイズログファイルのサイズ

TimeBasedTriggeringPolicy、履歴ログファイルを生成する時間間隔に応じて、そのパラメータ:

時間新たな履歴ログファイルの間隔は、時間で、デフォルト値は1である区間発電
モジュ4時間の間隔として間隔を調整する必要がある場合、現在時刻が午前3時00分である、履歴ログファイル四時の発生時刻8:00 ...
ランダム遅延履歴ログファイルを生成するために秒のmaxRandomDelayの最大数は、デフォルトは0で、同じサーバおよび終了時間ローリングログファイルの設定上の複数のアプリケーションが存在する場合、この設定は非常に便利です、あなたは別の時間に負荷を分散することができます。

それが有効なときSizeBasedTriggeringPolicyポリシーファイル名のタイムスタンプを変更しないであろうからSizeBasedTriggeringPolicyとTimeBasedTriggeringPolicyの場合は、それ以外の場合は、元の履歴ログファイルが上書きされます、それは私filePattern%を与える必要がある、使用しました。

2.3.2、DefaultRolloverStrategy

私たちは、以下の共通のパラメータがあります。

履歴ログファイルの最大最大数

 

こうしたここJDBCAppender、JMSアペンダ、JPAAppender、KafkaAppenderなど、など、他のアペンダ、多くのを1つずつ導入されていない、ドキュメントは公式サイトを参照することができますがあります。https://logging.apache.org/log4j/2.x/manual/appenders。 HTML

3、レイアウト

log4j2申し出なHTMLレイアウト、JSONレイアウト、パターンレイアウト、XMLレイアウトやレイアウトなどの様々な、ように、ここでは、パターンレイアウトに焦点を当てます。

<PatternLayoutはパターン= "%D%-p [%T]%C.%M [%F:%のL]  - >%M%N" />

Log4J2はlog4jの1.xのに非常に類似しているパラメータを介してログ情報をフォーマット。

D {パターン}、日付{パターン } 日付出力のログイベントは、その後のフォーマットを指定することができる;とおり%D {DD MMM YYYY HH :MM:SS、SSS}、 同様の出力:2012年11月2日14:34: 02781
P | {レベル=レベルラベル、ラベル=レベル、...}、P | {長さ= N-レベル}、P | =小文字真レベルに{|} falseに優先出力ロギング・イベント、例えば:%レベル{ WARN = Wは、INFO = I、長さ= 2}である
T、TN、スレッド、のthreadNameスレッド出力ジェネレータロギングイベント名
T、ID、スレッドID生成されたIDのスレッド出力ロギングイベント
C {精度}、ロガー{精度}出力クラスのログイベントを、精度は、カテゴリ「org.apache.commons.Foo」として、後記することができる。%のC {1 } を出力する「foo」という%のC {1 } 「oacFoo」を出力する
C {精度}、クラス{精度}出力は、発信者のロギング要求の完全修飾クラス名を提供し、精度がバック与えられ、そしてc {精度}類似することができます。
Mは、メソッドの出力は、メソッドのロギング要求の名前を提供します。高い運用コストが、気を自然に影響を与える可能性があります。
Fは、ファイルの出力ファイル名は、ロギングの要求を送りました。高い運用コストが、気を自然に影響を与える可能性があります。
L、ライン出力行番号は、ロギングの要求を発行しました。高い運用コストが、気を自然に影響を与える可能性があります。
M {nolookups} {ANSI}、 MSG {nolookups} {ANSI}、メッセージ{nolookups} {ANSI} メッセージ出力アプリケーションが提供する
n個のインターネットラインセパレータに関連付けられた出力は、Windowsプラットフォーム\ R \ nは、UNIXプラットフォーム\ N-
X、NDCの NDC(ネスト診断コンテキスト)をロギングスレッド生成イベントに関連付けられた出力
Xキー{[、KEY2 ...]}、{MDCキー【、KEY2 ...]}、MDCキー{[ 、KEY2 ...]}生成された出力ログイベントに関連付けられたスレッドのMDC(マッピングされた診断コンテキスト)。一般的に滞在するクライアントサーバアクセスログを区別することは容易で同じサーバーに接続された複数のクライアントのために使用。クライアントログの記録符号として%のX {5} 5

デフォルトでは、全ての関連情報が出力され、フォーマットは、によって修飾することができ、最小のフィールド幅、最大幅および磁界方向の位置合わせを変更します。フォーマットの変更は、変換とパーセント記号文字の間に配置されました。

%20cは、カテゴリ名はパッドを左スペースで、20文字未満である場合。
%の-20℃カテゴリ名はスペースを右パッドで、20文字未満である場合。
%の.30cカテゴリ名が30文字より長い場合、左から始まることは余分な文字をオフに傍受。
%の20.30cスペースパッドを左とカテゴリ名は、以下20文字を超える場合は、カテゴリ名が30文字より長い場合には、左から余分な文字をオフ傍受。
%の-20.30cカテゴリ名はスペースパッドと右と、より少ない20文字を超える場合は、カテゴリ名が30文字より長い場合には、左から余分な文字をオフ傍受。

https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayoutより多くの命令を参照してください。

4、ルックアップ

検索の主な機能は、ログにいくつかの特別な値を追加する別の方法を提供することです。

<ファイル名= "lookupTest" fileNameに= "D:\ TEMP \ lookup.log"> 
    <PatternLayoutはパターン= "$$ {日付:YYYY-MM} $$ {ENV:PATH} $ {のjava:ランタイム} $ {SYS :のfile.encoding}%のD - >%M%N」/> 
</ファイル>

4.1、日付検索

有効なフォーマットを確認してSimpleDateFormatを使用して、現在の日付の値を取得し、月の現在の日付を取得し、例えば:$$ {日:YYYY-MM}

4.2、環境のルックアップ

環境変数の値を取得します。変数$ PATHの値を取得するよう:$$ {ENV:PATH}

4.3、Javaの検索

Javaの相関値は、環境情報を取得し、このようなアクセスJavaなどのランタイム:$ {Javaの:ランタイム}

4.4、システムのプロパティのルックアップ

システムプロパティに関する値を取得するステップと、符号化されたファイルの取得システム:$ {SYS:のfile.encoding}

 

他の検索の多くは、ドキュメントの公式ホームページを参照することができ、ここでは説明しません、などコンテキスト地図検索、JNDIルックアップ、春ブーツ検索、として、があります。https://logging.apache.org/log4j/2.x/manual/ lookups.html。

5、フィルタ

フィルタは、ログ出力するかどうかを決定するために使用される、いずれかのフィルタリング方法でフィルタの呼び出しは、結果値を返します。、ACCEPT DENYまたは中立。以上があります

<フィルタ> 
	<RegexFilter正規表現= "この*。" onMatch = "NEUTRAL" onMismatch = "DENY" /> 
	<ThresholdFilterレベル= "INFO" onMatch = "NEUTRAL" onMismatch = "DENY" /> 
	<TimeFilterの開始= "05:夜12時"端= "夜5時30分00秒" onMatch = "ニュートラル" onMismatch = "/>"拒否     
</フィルタ>

5.1 RegexFilter

正規表現は、フィルタリングするかどうかを決定するJava介してログメッセージと比較します。

5.2、ThresholdFilter

レベルは、ログフィルタによって決定された場合

5.3、のTimeFilter

時間を濾過により判断されます

5.4 CompositeFilter

他のフィルタの組み合わせを介して結合フィルタは、フィルタ・チェーンを形成します。

 

します。https://logging.apache.org/log4j/2.x/manual/filters.htmlなどBurstFilter、MarkerFilterなどというように、ここでは一つ一つが、文書は公式サイトを参照することができます導入されていない様々な他のフィルターがあります。

図6に示すように、実際の使用

6.1、コンフィギュレーション・ファイルlog4j2.xml

SRC / log4j2.xmlやリソースの下のsrc /メイン/(春ブーツプロジェクト)にファイルをすることができます。

<?XMLバージョン= "1.0"エンコード= "UTF-8" ?> 
< 設定の状態= "WARN" 厳密= "true"とはMonitorInterval = "30" > 
    < アペンダ> 
        < コンソール= "STDOUT" > 
            < PatternLayoutはパターン= "%をD%のP [%のT]%C.%M [%F:%のL] - >%M%N」 /> 
            < フィルター> 
                < RegexFilter 正規表現。= "この*" onMatch = "ニュートラル" onMismatch = "拒否" /> 
                <= "ニュートラル" onMismatch = "DENY" /> 
                < のTimeFilter 開始= "午前5時00分00秒" = "夜5時30分00秒" onMatch = "ニュートラル" onMismatch = "DENY" />     
            </ フィルタ> 
        </ コンソール> 
        < ファイル"ファイル" = fileNameに= "D:\ TEMP \ a.log" > 
            < PatternLayoutはのパターン= "%D%-p [%T]%C.%M [%F:%のL] - >% M%N "  /> 
        </ ファイル> 
        < ファイル="lookupTest」 fileNameに= "D:\ TEMP \ lookup.log" >
            < PatternLayoutはパターン= "$$ {日付:YYYY-MM} $$ {ENV:PATH} $ {ジャワ:ランタイム} $ {SYS:のfile.encoding}%のD - >%M%N"  /> 
        </ ファイル> 
        < RollingFile = "RollingFile" fileNameに= "D:\ TEMP \ B.LOG" filePattern = "D:\ TEMP \ $$ {日:YYYY-MM} \ B-%D {MM-DD-YYYY} - % i.log」> 
            < PatternLayoutはのパターン= "%D%-p [%のT]%C.%M [%F:%のL] - >%M%N"  /> 
            < ポリシー> 
                < OnStartupTriggeringPolicy /> 
                < SizeBasedTriggeringPolicy サイズ= "200キロバイト"  />
                < TimeBasedTriggeringPolicy/> 
            </ ポリシー> 
            < DefaultRolloverStrategy 最大= "5" /> 
        </ RollingFile > 
    </ アペンダ> 
    < ロガー> 
        < ルートレベル= "情報" > 
            < AppenderRef REF = "STDOUT"  /> 
            < AppenderRef REF = "ファイル"  /> 
            < AppenderRef REF = "lookupTest"  /> 
            < AppenderRef REF = "RollingFile"  /> 
        </ ルート> 
        <! -ロガー名= "com.inspur"レベル= "情報"> <AppenderRef REF = "ファイル" /> </ロガー- > 
    </ ロガー> 
</ 設定>

6.2、コード例

パッケージcom.inspur.demo.log。

輸入org.apache.logging.log4j.LogManager;
輸入org.apache.logging.log4j.Logger; 


/ ** 
 * log4j2使用示例
 * / 
パブリック クラスLog4j2Case {
     プライベート 静的ロガーロガー= LogManager.getLogger(Log4j2Case。クラス)。
    パブリック 静的 ボイドメイン(文字列[]引数)をスロー例外{ 
        logger.debug(「これは、デバッグメッセージです」)。
        logger.warn(logger.getClass())。
        以下のためにint型私= 0;私<100; I ++ ){
            logger.info(「これは情報メッセージです:」+ I)。
        } 
    } 
}

コンソールとログメッセージを生成した関連文書を参照することができ、コードを実行します。

おすすめ

転載: www.cnblogs.com/wuyongyin/p/12326174.html