log 4 j使用ノート

9051 ワード

log 4 jの使用は、3つの主要な概念に関連しています.
共通クラス
Logger
ログ・レコードの処理を担当するほとんどの操作
パブリックインタフェース
Appender
ログ記録操作の出力を制御する
パブリック抽象クラス
Layout
Appenderの出力のフォーマットを担当
 
Logger
ログレコーダ(Logger)は、ログ処理のコアコンポーネントです.
 
log 4 jは5種類の正常レベル(Level)を有する
DEBUG
パーティクル情報イベントがアプリケーションのデバッグに非常に役立つことを示します.
INFO
メッセージが太さレベルでアプリケーションの実行プロセスを強調していることを示します.
WARN
潜在的なエラーが発生することを示します
ERROR
エラーイベントが発生しても、システムの継続に影響しないことを示します.
FATAL
重大なエラー・イベントごとにアプリケーションが終了することを示します.
 
さらに、2つの特別なログ・レベルが使用可能です.
ALL
すべてのログを開くには最下位レベルです
OFF
すべてのログを閉じるには最高レベルです
 
ログレコーダ(Logger)は、そのレベル以上の情報のみを出力します.ログ・レコーダのレベルが設定されていない場合は、最近の祖先のレベルが継承されます.したがって、パッケージcom.foo.barにログレコーダ(Logger)が作成され、レベルが設定されていない場合、パケットcomに継承されます.fooで作成されたログレコーダ(Logger)のレベル.もしcom.fooにログレコーダ(Logger)が作成されていなければcom.foo.barで作成されたログレコーダ(Logger)はrootログレコーダ(Logger)のレベルを継承し、rootログレコーダ(Logger)はしばしばインスタンス化されて利用可能であり、そのレベルはDEBUGである. 
 
ログレコーダの作成とレベルの設定:
//  root     
Logger logger = Logger.getRootLogger();  

//           
Logger logger = Logger.getLogger("MyLogger");

//       ,                     
static Logger logger = Logger.getLogger(test.class);

//          
logger.setLevel((Level)Level.WARN);

ログ・レベルは、7つのレベルのいずれであってもよい.
 
 Appender
Appenderはログの出力方法を制御します.以下に使用可能なAppenderを示します.
ConsoleAppender
ユーザが指定したレイアウトを使用して、ログイベントをSystemに出力する.またはシステム.err.デフォルトのターゲットはSystemです.out.
FileAppender
ログイベントをファイルに書き込む
DailyRollingFileAppender
FileAppenderを拡張するため、複数のログ・ファイルを1人のユーザーが選択した頻度でループ・ログに記録できます.
RollingFileAppender
FileAppenderを拡張し、一定のサイズのログファイルをバックアップします.
WriterAppender
ユーザの選択に応じてログイベントをWriterまたはOutputStreamに書き込む.
SMTPAppender
特定のログ・イベントが発生した場合、通常はエラーや重大なエラーが発生した場合にメールを送信します.
SocketAppender
ログイベントオブジェクトをリモートログサーバ(通常はネットワークソケットノード)に送信します.
SocketHubAppender
ログイベントオブジェクトをリモートログサーバグループ(通常はネットワークソケットノード)に送信します.
SyslogAppender
リモート非同期ログに記録されたバックグラウンド精霊プログラム(daemon)にメッセージを送信します.
TelnetAppender
読み取り専用ネットワークソケットにメッセージを送信するためのlog 4 j appender.
Appenderインタフェースを実装し、独自の方法でログ出力を行うAppenderを作成することもできます.
 
Layout
Appenderは、出力をフォーマットする方法を知るために、それに関連するLayoutを使用する必要があります.現在、log 4 jには3種類のLayoutがあります.
HTMLLayout
フォーマットログはHTMLテーブルとして出力されます.
PatternLayout
指定した変換モードに基づいてログ出力をフォーマットするか、変換モードが指定されていない場合はデフォルトの変換モードを使用します.
SimpleLayout
ログ出力を非常に簡単にフォーマットします.レベルレベルレベルレベルレベルを印刷し、ダッシュ「-」に従ってログメッセージを印刷します.
 
基本例
例1:SimpleLayoutとFileAppender
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;

public class SimpandFile {
	static Logger logger = Logger.getLogger(SimpandFile.class);
	
	public static void main(String args[]) {
		SimpleLayout layout = new SimpleLayout();
		FileAppender appender = null;
		try {
			appender = new FileAppender(layout,"output1.txt",false);
		} catch(Exception e) {}
		
		logger.addAppender(appender);
		
		logger.setLevel((Level) Level.DEBUG);
		
		logger.debug("Here is some DEBUG");
		logger.info("Here is some INFO");
		logger.warn("Here is some WARN");
		logger.error("Here is some ERROR");
		logger.fatal("Here is some FATAL");
	}
}

 
例2:HTML LayoutとWriterAppender
import java.io.*;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.HTMLLayout;
import org.apache.log4j.WriterAppender;

public class HTMLLandWrite {
	static Logger logger = Logger.getLogger(HTMLLandWrite.class);
	
	public static void main(String args[]) {
		HTMLLayout layout = new HTMLLayout();
		
		WriterAppender appender = null;
		
		try {
			FileOutputStream output = new FileOutputStream("output2.html");
			appender = new WriterAppender(layout,output);
		} catch(Exception e) {}
		
		logger.addAppender(appender);
		logger.setLevel((Level) Level.DEBUG);
		logger.debug("Here is some DEBUG");
		logger.info("Here is some INFO");
		logger.warn("Here is some WARN");
		logger.error("Here is some ERROR");
		logger.fatal("Here is some FATAL");
	}
}

 
例3:PatternLayoutとConsoleAppender
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.ConsoleAppender;

public class ConsandPatt {
	static Logger logger = Logger.getLogger(ConsandPatt.class);
	
	public static void main(String args[]) {
		// Note, %n is newline
		String pattern = "Milliseconds since program start: %r %n";
		pattern += "Classname of caller: %C %n";
		pattern += "Date in ISO8601 format: %d{ISO8601} %n";
		pattern += "Location of log event: %l %n";
		pattern += "Message: %m %n %n";
		
		PatternLayout layout = new PatternLayout(pattern);
		
		ConsoleAppender appender = new ConsoleAppender(layout);
		
		logger.addAppender(appender);
		
		logger.setLevel((Level) Level.DEBUG);
		
		logger.debug("Here is some DEBUG");
		logger.info("Here is some INFO");
		logger.warn("Here is some WARN");
		logger.error("Here is some ERROR");
		logger.fatal("Here is some FATAL");
	}
}

 
外部プロファイル
Log 4 jはしばしば外部ログファイルと連携して使用され、ソフトウェアにハードコーディングする必要がない選択肢が多い.外部プロファイルを使用する利点は、オプションを変更してプログラムを再コンパイルする必要がないことです.唯一の欠点はio命令を用いるため,速度がやや遅くなることである.
 
外部プロファイルを指定するには、テキストファイルまたはXMLファイルの2つの方法があります.
 
XMLプロファイルの例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.SimpleLayout"/>
	</appender>
	<root>
		<priority value ="debug" />
		<appender-ref ref="ConsoleAppender"/>
	</root>
</log4j:configuration>

ファイルは標準的なXML宣言から始まり、DTD(ドキュメントタイプ定義)を示すDOCTYPE宣言に従って、XMLファイルの構造を定義します.たとえば、他の要素に埋め込むことができる要素などです.上記のファイルはlog 4 jリリースのsrc/java/org/apache/log 4 j/xmlディレクトリにあります.次に、DOCTYPE宣言でルート要素として指定されたすべての要素をカプセル化したlog 4 j:configuration要素を見てみましょう.ルート要素に埋め込まれる構造はappenderとrootの2つです.
appender
ここでは、「ConsoleAppender」というAppenderを作成します.この例で「ConsoleAppender」を選択したのは、サンプルの設計のためです.次にこのappenderクラスはフルネームで与えられ,しばしば仕様(fully qualified)クラス名が用いられる.Appenderには、指定したnameとclassが必要です.Appenderに埋め込まれているのはlayout要素で、ここではSimpleLayoutとして指定されています.Layoutにはclassプロパティが必要です.
root
root要素は存在し、分類できない必要があります.例の優先度は「debug」に設定され、appenderがappender-ref要素を満たすように設定されます.さらに多くのプロパティまたは要素を指定できます.log 4 jリリースのsrc/main/resources/org/apache/log 4 j/xml/log 4 jを表示します.dtdは、XMLプロファイル構造の詳細について説明します.
 
DOMConfiguratorはDOMツリーを使用してlog 4 j環境を初期化します.テストコードは次のとおりです.
public class ExternalXMLTest {
static Logger logger = Logger.getLogger(filetest.class);

	public static void main(String args[]) {
		DOMConfigurator.configure("xmllog4jconfig.xml");
		
		logger.debug("Here is some DEBUG");
		logger.info("Here is some INFO");
		logger.warn("Here is some WARN");
		logger.error("Here is some ERROR");
		logger.fatal("Here is some FATAL");
	}
}

 
PatternLayout付きFileAppenderのログレコーダのXML構成を実現するには:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	<appender name="appender" class="org.apache.log4j.FileAppender">
		<param name="File" value="Indentify-Log.txt"/>
		<param name="Append" value="false"/>
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
		</layout>
	</appender>
	<root>
		<priority value ="debug"/>
		<appender-ref ref="appender"/>
	</root>
</log4j:configuration>