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の構成について説明します.
まず、いくつかのパラメータの意味を見てみましょう.
<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はエラー情報を表示します.