1。概要
1.1背景
伐採は、私たちの日常開発において非常に重要です。アプリケーションにログを追加することは、通常、3つの目的に基づいています。コード内の変数の変更を監視し、他のアプリケーションによる統計分析のためにファイルに定期的に記録します。将来の監査の基礎としてコードランタイム軌道を追跡する。統合開発環境でデバッガーとして機能し、情報をファイルまたはコンソールにデバッグするコードを印刷します。
1.2はじめに
log4j(log for java)は、Apacheのオープンソースプロジェクトであり、ログを管理するための繊細な方法を提供します。構成ファイルを介して、複数の選択肢を使用して各ログの出力形式と宛先を制御できます。情報のレベルを定義することにより、コード内のフィードバック情報を柔軟に切り替えることもできます。簡単に言えば、Log4Jは、開発者がログ出力を管理するのに役立つAPIライブラリです。その最も重要な機能は、構成ファイルがログ情報の優先度、ログ情報の出力宛先、およびログ情報の出力形式を柔軟に設定できることです。
2.LOG4J構成
2.1log4jクラス図
2.2構成ファイルの定義
LOG4Jは、Javaプログラムを介して動的に設定できます。この方法の明らかな欠点は、ログ出力レベルとその他の情報を変更する必要がある場合は、Javaファイルを変更してから再コンパイルする必要があります。これは非常に面倒です。
構成ファイルを使用すると、アプリケーションがより柔軟になり、ログを構成し、ログ出力メソッドには出力の優先度、出力宛先、出力形式が含まれます。 log4jは2つの構成ファイル形式をサポートします。1つはXMLファイル、もう1つはJava機能ファイルlog4j.properties(key = value)です。
2.3構成ファイルlog4j.Properties
LOG4Jが初めて呼び出されると、LOG4Jはクラスパス(もちろん、DirectoryがClassPathに含まれている限り)にファイルを見つけ、ファイルの完全な構成を読み取ります。この構成ファイルは、log4jにどのような形式、それがどこにあるかを出力する情報を伝えます。それに対応して、3つの側面を構成する必要があります。
1。ルートディレクトリ(レベルと宛先);
2。宛先(コンソール、ファイルなど);
3。出力スタイル(ログコンテンツの表示方法)
例は次のとおりです。
#ログ出力レベルをセットします
log4j.rootlogger = debug、appender1
#outputへのコンソール
log4j.appender.appender1 = org.apache.log4j.consoleAppender
#Styleはttcclayoutです
log4j.appender.appender1.layout = org.apache.log4j.ttcclayout
2.4。 log4j 3つのコンポーネントの説明
LOG4Jには、ロガー、Appender(出力ソース)、レイアウト(レイアウト)の3つの主要なコンポーネントがあります。これらの3つのコンポーネントを組み合わせることで、情報の種類とレベルを簡単に記録することができ、実行時にログ出力のスタイルと場所を制御できます。以下は3つのコンポーネントです。
2.4.1ロガーロガー
Loggerオブジェクトは、System.outまたはSystem.Errのログライターを置き換えるために使用されます。これは、プログラマーにログ情報出力を提供するために使用されます。
ルートロガーは、構文で構成されています。
log4j.rootlogger = [level]、appendername、appendername、…
その中で、レベルは、オフ、致命的、エラー、警告、情報、デバッグ、すべてまたはカスタムレベルに分割されたロギングの優先事項です。 LOG4Jは、高から低いもの、つまりエラー、ウォーン、情報、デバッグを優先して、4つのレベルのみを使用することをお勧めします。ここで定義されているレベルでは、アプリケーション内の対応するログ情報のスイッチを制御できます。たとえば、情報レベルがここで定義されている場合、アプリケーション内のすべてのデバッグレベルのログ情報は印刷されません。付録ログ情報が出力される場所を指定します。複数の出力宛先を同時に指定できます。
2.4.2出力宛先Appender
LOG4Jログシステムにより、コンソール(コンソール)、ファイル(ファイル)、新しいファイルが日またはファイルサイズに基づいて生成され、ストリームの形の他の場所に送信されるさまざまな場所へのログ出力が可能になります。
Appenderを構成し、その構文は次のように表されます。
log4j.appender.appendername = fully.aqualified.name.of.appender.classlog4j.appender.appendername.option1 = value1…log4j.appender.appendername.option = valuen
"fully.qualified.name.of.appender.class"は、次の5つの目的地のいずれかを指定できます。
1).org.apache.log4j.consoleAppender(コンソール)
2).org.apache.log4j.fileappender(file)
3).org.apache.log4j.dailyrollingfileappender(毎日1つのログファイルを生成)
4).org.apache.log4j.rollingfileappender(ファイルサイズが指定されたサイズに達すると新しいファイルが生成されます)
5).org.apache.log4j.WriterAppender(指定された場所にログ情報をストリーム形式で送信)
(1).ConsoleAppenderオプション
(2).FILEAPPENDERオプション
(3).DailyrollingFileAppenderオプション
つまり、対応する形式は次のとおりです。
1) '。' yyyy-mm:毎月
2) '。' yyyy-ww:毎週
3) '。' yyyy-mm-dd:毎日
4) '。' yyyy-mm-dd-a:1日2回
5) '。' yyyy-mm-dd-hh:1時間ごと
6) '。' yyyy-mm-dd-hh-mm:毎分
4.RollingFileAppenderオプション
2.4.3フォーマット(レイアウト)レイアウト
好みに応じて、自分のログ出力をフォーマットしたい場合があります。 LOG4Jは、Appenderの背後にあるレイアウトを添付して、この関数を完了できます。
レイアウトの構成、その構文は次のように表されます。
log4j.appender.appendername.layout = fully.aqualified.name.of.layout.classlog4j.appender.appendername.layout.option1 = value1…log4j.appender.appendername.layout.option = valuen
レイアウトは、次のように4つのログ出力スタイルを提供します。
(1).org.apache.log4j.htmllayout(htmlテーブル形式のレイアウト)、
(2).org.apache.log4j.patternlayout(レイアウトモードを柔軟に指定できます)、
(3).org.apache.log4j.simplelayout(ログ情報のレベルと情報の文字列が含まれています)、
(4).org.apache.log4j.ttcclayout(ログ生成時間、スレッド、カテゴリなどを含む情報)
htmllayoutオプション
locationinfo = true:デフォルト値はfalse、javaファイル名と行番号を出力します
title =私のアプリファイル:デフォルト値はlog4jログメッセージです。
2。パターンレイアウトオプション
ConversionPattern =%m%n:指定されたメッセージをフォーマットする方法を指定します。
ここで説明する必要があるのは、ログ情報形式のいくつかのシンボルの意味です。
修飾子を%とパターン文字の間に追加して、最小幅、最大幅、およびテキストアライメントを制御できます。のように:
1)%20C:出力カテゴリの名前を指定します。最小幅は20です。カテゴリの名前が20未満の場合、デフォルトで右に整列されています。
2)%-20C:出力カテゴリの名前を指定します。最小幅は20です。カテゴリの名前が20未満の場合、「 - 」記号は左のアライメントを指定します。
3)%。30C:出力カテゴリの名前を指定します。最大幅は30です。カテゴリの名前が30を超える場合、左側の余分な文字が切断されますが、30未満の場合、スペースはありません。
4)%20.30c:カテゴリの名前が20未満の場合は、スペースを埋めて正しく揃えます。その名前が30文字より長い場合は、左から余分な文字を切り取ります。
2.5.log4j構成の例
LOG4J構成のシンプルさにより、ますます多くのアプリケーションに広がります。LOG4J構成ファイルは、コンソールへの出力、ファイル、ロールバックファイル、ログメールの送信、データベースログテーブルへの出力、カスタムタグなどの完全な関数セットを実装します。
log4j.rootlogger = debug、console、a1、im log4j.addivity.org.apache = true
nコンソールに適用します
log4j.appender.console = org.apache.log4j.consoleappenderlog4j.appender.threshold = debug log4j.appender.console.target = system.outlog4j.appender.console.layout = org.apache.log4j.perthernlayout log4j.appender.console.layout.conversionpattern =%d-%c - %-4r [%t]%-5p%c%x-%m%n
nファイルに適用します
log4j.appender.file = org.apache.log4j.fileappenderlog4j.appender.file.file = file.loglog4j.appender.file.append = falselog4j.appender.file.layout = org.apache.log4j.patternlayoutlog4j.pentender.filent.filent.filen.filen.filen.filen.filen.filen.firtiln.firtlioutlog4j.pertlog4j.pertlioutlog4j.pentern.firtiln - %-4R [%t]%-5p%C%x -%m%n
nファイルロールバックに適用します
log4j.appender.rolling_file = org.apache.log4j.rollingfileappenderlog4j.appender.appender.rolling_file.threshold = errorlog4j.appender.rolling_file.file = rolling.loglog4j.appender.rolling_file.append = truelog4j.append.append.append.append = truelog4j.appender.append = truelog4j.appenden ender.rolling_file.maxfilesize = 10kblog4j.appender.rolling_file.maxbackupindex = 1log4j.appender.rolling_file.layout = org.apache.log4j.patternlayoutlog4j.appender.rolling_file.layout.convers.convertionpitern。 %-5p%C%x -%m%n
nソケットに適用します
log4j.appender.socket = org.apache.log4j.rollingfileappenderlog4j.appender.socket.remotehost = localhost loghost log4j.appender.socket.port = 5001log4j.appender.socket.locationinfo = true log4j.appender.socket.layout = org.apache.log4j.patternlayoutlog4j.appender.socet.layout.conversionpattern = [start]%d {date} [date]%n%p [優先]%n%x [ndc]%n%n%n%n%N log4j.appender.lf5_appender = org.apache.log4j.lf5.lf5appender log4j.appender.lf5_appender.maxnumberofrecords = 2000nログを電子メールに送信します
log4j.appender.mail = org.apache.log4j.net.smtpappenderlog4j.appender.mail.threshold = fatallog4j.appender.mail.buffersize = 10log4j.appender.mail.from = www.wuset.comlog4j.appender.mail.smtphost = www.wusetu.comlog4j.appender.mail.subject=log4jメッセージlog4j.appender.mail.to = www.wusetu.comlog4j.appender.mail.layout=org.apache.log4j.patternlayout log4j.appender.mail.layout.conversionpattern =%d-%c-%-4r [%t]
nデータベース用
log4j.appender.database = org.apache.log4j.jdbc.jdbcappenderlog4j.appender.database.url = jdbc:mysql:// localhost:3306/testlog4j.appender.database.driver = com.mysql.jdbc.driver log4j.appender.database.user = rootlog4j.appender.database.password = log4j.appender.database.sql = log4j(message)値に挿入( '%d -%c - %-4r [%t]%-5p%c%x -x - %m%n ')log4j.appender.database.layout = org.apache.log4j.patternlayout log4j.appender.database.layout.conversionpattern =%d-%c - % - 4r [%t]%-5p%c%x-%m%nlog4j.appender.a1 = org.apache.log4j.dailyrollingfileapeand log4j.appender.a1.file = samplemessages.log4j log4j.appender.a1.datepattern = yyyymmdd-hh'.log4j'log4j.appender.a1.layout = org.apache.log4j.xml.xmllayout
nカスタムAppender
log4j.appender.im = net.cybercorlin.util.logger.appender.imappenderlog4j.appender.im.host = mail.cybercorlin.net log4j.appender.im.username = username log4j.appender.im.im.im.password = password log4j.appender.im.recipient = recipient = recipient = recipient = [email protected]=org.apache.log4j.log4j.patternlayoutlog4j.appender.im.layout.conversionpattern = [フレームワーク]%d-%c-%4r [%t]%-5p%x -%m%n%n
3。WebアプリケーションのSpringにLOG4Jを構成します
まず、次の構成ステートメントをWeb.xmlファイルに追加する必要があります。
<! - プロジェクト間の競合を回避するには、一意のWebAppRootkeyを定義します - > <Context-Param> <Param-Name> WebAppRootkey </param-name> <param-value> myProject.Root.Root.Root </Param-Value> </Context-Param> <! <param-value> /web-inf/classes/config/log4j/log4j.properties </param-value> </context-param> <! - ログ構成ファイルを更新するために時間間隔を設定します。 </context-param> <! - スプリングフレームワークにlog4jリスナーをロードしますlog4jconfiglistener-> <リスナー> <リスナークラス> org.springframework.web.util.log4jconfiglistener
プロパティLOG4JCONFIGLOCATIONの値を/web-inf/classes/log4j.propertiesに設定することをお勧めします。そのため、テストを行うと、Webアプリケーションを起動しないときにログ情報を正しく記録できます。 log4jConfiglistenerは、Springが提供するツールクラスです。 LOG4J監視スレッドを開き、60秒ごとにログ構成の変更を検出します(LOG4JREFRESHINTERVAL変数定義)。そのため、新しい構成を適用するために毎回Webサービスを再起動する必要はありません。 Tomcatでは、Webアプリケーションに基づいてシステムプロパティが分離されていません。したがって、Webアプリケーションごとに一意の「WebAppRootkey」を定義する必要があり、WebApp.Rootと名付けました。環境を開始した後、log4jConfiglistenerは値をWebApp.Root変数に注入します。
4.コードでlog4jを使用します
4.1。レコーダーを入手してください
LOG4Jを使用して、最初のステップは、ログ情報の制御を担当するログレコーダーを取得することです。
public static Logger getLogger(文字列名)
指定された名前でロガーを取得し、必要に応じて、名前の新しいロガーを作成します。名前は通常、このクラスで名前が付けられています。
static logger logger = logger.getLogger(serverwithlog4j.class.getName()))
4.2。構成ファイルを読み取ります
ロガーを取得した後、2番目のステップはlog4j環境を構成し、構文は次のようになります。
log4j.propertiesをプロジェクトのルートディレクトリに配置すると、この文を記述することもできず、プログラムは自動的に構成ファイルを見つけます。
BasicConfigurator.configure():デフォルトのLOG4J環境を自動的かつ迅速に使用します。 propertyconfigurator.configure(String ConfigFileName):Javaの機能ファイルを使用して記述された構成ファイルを読み取ります。
domconfigurator.configure(string filename):xmlフォームの構成ファイルを読み取ります。
LOG4Jは上記の3つのコンフィギュレータを使用して初期化され、PropertyConfiguratorの使用はすべてのシステムに適しています。次の声明。
propertyconfigurator.configure( "log4j.properties");
一般的なJavaプロジェクトの場合、上記のステートメントを使用せずにLOG4Jを初期化できます。 log4jは、ClassPathの下で構成ファイルを自動的に見つけて初期化します。 log4jが構成ファイルを自動的に初期化できない場合、上記のメソッドを初期化する必要があります。
注:構成ファイルを初期化するときは、システムが起動したときに1回だけ実行することをお勧めします。複数回実行すると、1つはリソースの無駄であり、もう1つはlog4jの古いバージョンでは、dailylollingfileappenderを使用する場合に問題が発生する可能性があることです。
4.3。レコード情報(フォーマットログ情報)を挿入する
前の2つの必要な手順が完了したら、ログに記録する場所に異なる優先レベルのロギングステートメントを簡単に挿入できます。構文は次のとおりです。
logger.debug(オブジェクトメッセージ);