log 4 jについて話します
28049 ワード
log 4 jはapacheのプロジェクトであり、このようなツールを自分で再開発する必要がなく、プロジェクト内で出力情報を様々なデバイスやファイルに柔軟に保存できるようにすることを目的としています.
まず、プロファイルの各パラメータについて説明します.そうすれば、合理的に構成できます.
パラメータの意味:
1.ルートLoggerの構成:
Log 4 jは、XML形式のファイルとJavaプロパティファイルlog 4 j.properties(キー=値)の2つのプロファイル形式をサポートします.以下では、log 4 j.propertiesファイルをプロファイルとして使用する方法を説明します:1、ルートLoggerを構成する:Logger ログ・レコードの処理のほとんどを担当します.その構文は、log 4 j.rootLogger=[level],appenderName,appenderName,...ここで、levelはログ記録の優先度であり、OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALLまたはカスタムのレベルに分けられる.Log 4 jは4つのレベルのみを使用することを推奨し、優先度が高いものから低いものまでERROR、WARN、INFO、DEBUGである.ここで定義したレベルでは、アプリケーション内の対応するレベルのログ情報のスイッチを制御できます.例えば、ここでINFOレベルが定義されており、このレベル以上のもののみが処理されると、アプリケーション内のすべてのDEBUGレベルのログ情報は印刷されません.ALL:すべてのログを印刷し、OFF:すべてのログ出力をオフにします.appenderNameは、ログ情報がどこに出力されるかを指定します.複数の出力先を同時に指定できます.例えば、log 4 j.rootCategory=DEBUG,stdout,R つまり、私はすべての優先権がDebugより高い情報を表示し、「stdout」、「R」は私が2つの出力端子を定義したことを示します(実はAppenderで、どんな名前でもいいです).
②、構成ログ情報出力先Appender:
構文:log 4 j.appender.appender Name=fully.qualified.name.of.appender.classlog 4 j.appender.appender.appender Name.option 1=value 1...log 4 j.appender.appenderName.optionN=valueN
ここでappenderNameは①で定義されており、任意に名前を付けることができます.
ここで、Log 4 jが提供するappenderには、org.apache.log 4 j.ConsoleAppender(コンソール)、org.apache.log 4 j.FileAppender(ファイル)、org.apache.log 4 j.DailyRollingFileAppender(毎日1つのログファイルを生成)、org.apache.log 4 j.RollingFileAppender(ファイルサイズが指定サイズに達したときに新しいファイルを生成)、ファイルサイズはlog 4 j.appender.R.MaxFileSize=100 KBで設定できます.また、log 4 j.appender.R.MaxBackupIndex=1でバックアップファイルを保存するように設定できます.org.apache.log 4 j.WriterAppender(ログ情報を任意の指定された場所にストリーム形式で送信する)例えば、log 4 j.appender.stdout=org.apache.log 4 j.ClonsoleAppenderはstdoutという出力先を定義し、ConsoleAppenderはコンソールである.
例:log 4 j.appender.R=org.apache.log 4 j.DailyRollingFileAppender
Rという出力先を定義し、DailyRollingFileAppenderは毎日生成されるファイルです. log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log ファイルのパスと名前の指定
③、ログ情報のフォーマット(レイアウト)LayoutLayout Appenderの出力のフォーマットを担当します.構文は、log 4 j.appender.appenderName.layout=fully.qualified.name.of.layout.classlog 4 j.appender.appenderName.layout.option 1=value 1...log 4 j.appender.appenderName.layout.optionN=valueNここで、Log 4 jが提供するlayoutには、org.apache.log 4 j.LaHTMLテーブル形式でレイアウトされたorg.apache.log 4 j.PatternLayout(HTMLテーブル形式でレイアウトされたもの)、org.apache.log 4 j.PatternLayout(レイアウトモードを柔軟に指定できます)、org.apache.log 4 j.SimpleLayout(ログ情報のレベルと情報文字列を含む)、org.apache.log 4 j.TTCCLayout(ログ生成の時間、スレッド、カテゴリなどの情報を含む)
次のようになります. log 4 j.appender.stdout.layout=org.apache.log 4 j.PatternLayout(出力フォーマット指定)
log 4 j.appender.stdout.layout.ConversionPattern=[QC]%p[%t]%C.%M(%L)|%m%n(出力フォーマットパラメータを指定)2、フォーマットログ情報Log 4 JはC言語のprintf関数のような印刷フォーマットログ情報を採用し、印刷パラメータは以下の通りである:%m 出力コードで指定されたメッセージ%p 出力優先度、すなわちDEBUG,INFO,WARN,ERROR,FATAL%r アプリケーション起動からlog情報出力までの出力にかかるミリ秒数%c 属するクラスを出力します.通常は、そのクラスのフルネーム%tです. ログイベントを生成するスレッド名%nを出力 Windowsプラットフォームが「rn」、Unixプラットフォームが「n」%dの折り返し改行文字を出力します. ログの時点の日付または時刻を出力します.デフォルトのフォーマットはISO 8601です.その後、フォーマットを指定することもできます.たとえば、%d{yyyyy MMM dd HH:mm:ss,SSS}などです.出力は2002年10月18日22:10:28921%lです. クラス名、発生したスレッド、およびコード内のロー数を含むログイベントの発生場所を出力します.
二、xmlの構成について説明します.
まず、いくつかのパラメータの意味を見てみましょう.
xmlの各要素の説明を見てみましょう.
最後にxmlの例を見てみましょう.
log 4 jサンプルプログラム:
①static Logger=Logger.getLogger(LogTest.class.getName()は、LogTestクラスに属するLoggerオブジェクトを作成し、現在のClassが何であるかをLoggerに知らせることです.②PropertyConfigurator.configure("log 4 j.properties")すなわち、現在のエンジニアリングディレクトリの下にあるsrcフォルダのlog 4 j.propertiesファイルまたはlog 4 j.xmlをプロファイルとして使用します.log 4 j.properties(log 4 j.xml)プロジェクトルートディレクトリの下に置いても、この文を書かなくても、プログラムは自動的にプロファイルを見つけます.3 logger.debugはdebugを出力する情報で、logger.infoは出力ヒント情報で、logger.warnは警告情報を表示し、logger.errorはエラー情報を表示します.
まず、プロファイルの各パラメータについて説明します.そうすれば、合理的に構成できます.
パラメータの意味:
1.ルートLoggerの構成:
Log 4 jは、XML形式のファイルとJavaプロパティファイルlog 4 j.properties(キー=値)の2つのプロファイル形式をサポートします.以下では、log 4 j.propertiesファイルをプロファイルとして使用する方法を説明します:1、ルートLoggerを構成する:Logger ログ・レコードの処理のほとんどを担当します.その構文は、log 4 j.rootLogger=[level],appenderName,appenderName,...ここで、levelはログ記録の優先度であり、OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALLまたはカスタムのレベルに分けられる.Log 4 jは4つのレベルのみを使用することを推奨し、優先度が高いものから低いものまでERROR、WARN、INFO、DEBUGである.ここで定義したレベルでは、アプリケーション内の対応するレベルのログ情報のスイッチを制御できます.例えば、ここでINFOレベルが定義されており、このレベル以上のもののみが処理されると、アプリケーション内のすべてのDEBUGレベルのログ情報は印刷されません.ALL:すべてのログを印刷し、OFF:すべてのログ出力をオフにします.appenderNameは、ログ情報がどこに出力されるかを指定します.複数の出力先を同時に指定できます.例えば、log 4 j.rootCategory=DEBUG,stdout,R つまり、私はすべての優先権がDebugより高い情報を表示し、「stdout」、「R」は私が2つの出力端子を定義したことを示します(実はAppenderで、どんな名前でもいいです).
②、構成ログ情報出力先Appender:
構文:log 4 j.appender.appender Name=fully.qualified.name.of.appender.classlog 4 j.appender.appender.appender Name.option 1=value 1...log 4 j.appender.appenderName.optionN=valueN
ここでappenderNameは①で定義されており、任意に名前を付けることができます.
ここで、Log 4 jが提供するappenderには、org.apache.log 4 j.ConsoleAppender(コンソール)、org.apache.log 4 j.FileAppender(ファイル)、org.apache.log 4 j.DailyRollingFileAppender(毎日1つのログファイルを生成)、org.apache.log 4 j.RollingFileAppender(ファイルサイズが指定サイズに達したときに新しいファイルを生成)、ファイルサイズはlog 4 j.appender.R.MaxFileSize=100 KBで設定できます.また、log 4 j.appender.R.MaxBackupIndex=1でバックアップファイルを保存するように設定できます.org.apache.log 4 j.WriterAppender(ログ情報を任意の指定された場所にストリーム形式で送信する)例えば、log 4 j.appender.stdout=org.apache.log 4 j.ClonsoleAppenderはstdoutという出力先を定義し、ConsoleAppenderはコンソールである.
例:log 4 j.appender.R=org.apache.log 4 j.DailyRollingFileAppender
Rという出力先を定義し、DailyRollingFileAppenderは毎日生成されるファイルです. log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log ファイルのパスと名前の指定
③、ログ情報のフォーマット(レイアウト)LayoutLayout Appenderの出力のフォーマットを担当します.構文は、log 4 j.appender.appenderName.layout=fully.qualified.name.of.layout.classlog 4 j.appender.appenderName.layout.option 1=value 1...log 4 j.appender.appenderName.layout.optionN=valueNここで、Log 4 jが提供するlayoutには、org.apache.log 4 j.LaHTMLテーブル形式でレイアウトされたorg.apache.log 4 j.PatternLayout(HTMLテーブル形式でレイアウトされたもの)、org.apache.log 4 j.PatternLayout(レイアウトモードを柔軟に指定できます)、org.apache.log 4 j.SimpleLayout(ログ情報のレベルと情報文字列を含む)、org.apache.log 4 j.TTCCLayout(ログ生成の時間、スレッド、カテゴリなどの情報を含む)
次のようになります. log 4 j.appender.stdout.layout=org.apache.log 4 j.PatternLayout(出力フォーマット指定)
log 4 j.appender.stdout.layout.ConversionPattern=[QC]%p[%t]%C.%M(%L)|%m%n(出力フォーマットパラメータを指定)2、フォーマットログ情報Log 4 JはC言語のprintf関数のような印刷フォーマットログ情報を採用し、印刷パラメータは以下の通りである:%m 出力コードで指定されたメッセージ%p 出力優先度、すなわちDEBUG,INFO,WARN,ERROR,FATAL%r アプリケーション起動からlog情報出力までの出力にかかるミリ秒数%c 属するクラスを出力します.通常は、そのクラスのフルネーム%tです. ログイベントを生成するスレッド名%nを出力 Windowsプラットフォームが「rn」、Unixプラットフォームが「n」%dの折り返し改行文字を出力します. ログの時点の日付または時刻を出力します.デフォルトのフォーマットはISO 8601です.その後、フォーマットを指定することもできます.たとえば、%d{yyyyy MMM dd HH:mm:ss,SSS}などです.出力は2002年10月18日22:10:28921%lです. クラス名、発生したスレッド、およびコード内のロー数を含むログイベントの発生場所を出力します.
二、xmlの構成について説明します.
まず、いくつかのパラメータの意味を見てみましょう.
<strong> </strong>
Threshold=DEBUG: 。
ImmediateFlush=true: true, 。
Target=System.err: :System.out,
<strong>FileAppender </strong>
Threshold=DEBUF: 。
ImmediateFlush=true: true, 。
File=mylog.txt: mylog.txt 。
Append=false: true, ,false 。
<strong>RollingFileAppender </strong>
Threshold=DEBUG: 。
ImmediateFlush=true: true, 。
File=mylog.txt: mylog.txt 。
Append=false: true, ,false 。
MaxFileSize=100KB: KB, MB GB. , , mylog.log.1 。
MaxBackupIndex=2: 。
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
xmlの各要素の説明を見てみましょう.
log4j:configuration (root element)
xmlns:log4j [#FIXED attribute] : log4j , "http://jakarta.apache.org/log4j/"
appender [* child] : appender
logger [* child] : logger
root [? child] : root root logger
appender
appender 。
name [#REQUIRED attribute] : appender ,
class [#REQUIRED attribute] : appender
param [* child] : appender
layout [? child] : appender layout
layout
layout appender 。
class [#REQUIRED attribute] : layout
param [* child] : layout
logger
logger 。
name [#REQUIRED attribute] : logger ,
additivity [#ENUM attribute] : "true"( ) "false", logger
level [? child] : logger
appender-ref [* child] : logger
root
root root logger。
param [* child] : root logger
level [? child] : root logger
appender-ref [* child] : root logger
level
level logger 。
class [#IMPLIED attribute] : level , "org.apache.log4j.Level
value [#REQUIRED attribute] : level 。 "all"、"debug"、"info"、"warn"、"error"、"fatal" "off"。 "off"
param [* child] : level
appender-ref
appender-ref appender , logger appender。
ref [#REQUIRED attribute] : appender
appender-ref
param
param 。 appender、layout、filter、errorHandler、level、categoryFactory root 。
name and value [#REQUIRED attributes] :
param
xml appender layout
Appender Layout 。 param 。
ConsoleAppender
ConsoleAppender 。
... ... ... ...
<appender name="console.log" class="org.apache.log4j.ConsoleAppender">
<layout ... >
... ...
</layout>
</appender>
... ... ... ...
FileAppender
FileAppender :File ;Append , , "true" "false"( )。
... ... ... ...
<appender name="file.log" class="org.apache.log4j.FileAppender">
<param name="File" value="/tmp/log.txt" />
<param name="Append" value="false" />
<layout ... >
... ...
</layout>
</appender>
... ... ... ...
RollingFileAppender
File Append , RollingFileAppender :MaxBackupIndex ( 1 );MaxFileSize ( 10M)。
... ... ... ...
<appender name="rollingFile.log" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/tmp/rollingLog.txt" />
<param name="Append" value="false" />
<param name="MaxBackupIndex" value="2" />
<param name="MaxFileSize" value="1024" />
<layout ... >
... ...
</layout>
</appender>
... ... ... ...
PatternLayout
PatternLayout ConversionPattern。
... ... ... ...
<layout class="org.apache.log4j.PatternLayout>
<param name="ConversionPattern" value="%d [%t] %p - %m%n" />
</layout>
... ... ... ...
最後にxmlの例を見てみましょう.
<?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- ConsoleAppender -->
<appender name="console"
class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="info"></param>
<layout class="org.apache.log4j.TTCCLayout">
<param name="ConversionPattern" value="TTCCLayout"></param>
</layout>
</appender>
<!-- -->
<appender name="dailyRollingFile"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="info"></param>
<param name="ImmediateFlush" value="true"></param>
<param name="File" value="c:/logs/dailyRollingFile.log"></param>
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'"></param>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
</layout>
</appender>
<!-- -->
<appender name="railyFile"
class="org.apache.log4j.RollingFileAppender">
<param name="File" value="c:/logs/railyFile.log"></param>
<param name="ImmediateFlush" value="true"/>
<param name="Threshold" value="info"></param>
<param name="Append" value="true"></param>
<param name="MaxFileSize" value="30KB"></param>
<param name="MaxBackupIndex" value="100"></param>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
</layout>
</appender>
<!-- -->
<appender name="file"
class="org.apache.log4j.FileAppender">
<param name="File" value="c:/logs/file.log"></param>
<param name="Threshold" value="info"></param>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
</layout>
</appender>
<!--
, 。
railyFile <param name="Threshold" value="info"></param>, info
-->
<root>
<priority value="debug" />
<appender-ref ref="console" />
<appender-ref ref="dailyRollingFile" />
<appender-ref ref="railyFile" />
<appender-ref ref="file" />
</root>
</log4j:configuration>
log 4 jサンプルプログラム:
import org.apache.log4j.*;
public class LogTest ...{
static Logger logger = Logger.getLogger(LogTest.class.getName());
public static void main(String[] args) ...{
PropertyConfigurator.configure ( “.\srclog4j.properties”);
logger.debug("Debug ...");
logger.info("Info ...");
logger.warn("Warn ...");
logger.error("Error ...");
}
}
①static Logger=Logger.getLogger(LogTest.class.getName()は、LogTestクラスに属するLoggerオブジェクトを作成し、現在のClassが何であるかをLoggerに知らせることです.②PropertyConfigurator.configure("log 4 j.properties")すなわち、現在のエンジニアリングディレクトリの下にあるsrcフォルダのlog 4 j.propertiesファイルまたはlog 4 j.xmlをプロファイルとして使用します.log 4 j.properties(log 4 j.xml)プロジェクトルートディレクトリの下に置いても、この文を書かなくても、プログラムは自動的にプロファイルを見つけます.3 logger.debugはdebugを出力する情報で、logger.infoは出力ヒント情報で、logger.warnは警告情報を表示し、logger.errorはエラー情報を表示します.