logbackのログ制御出力

5196 ワード

プログラム開発の過程でログは欠かせない情報で、それは私たちが問題を調査することを助けることができて、これは私たちがログを必要とする最大の利益で、異なる段階のログはすべてそれ自身の異なる作用があって、開発の段階で私たちがプログラムをデバッグすることを助けることができます;テストおよびオンラインでは、ログ分析システムのボトルネックを調査し、システムエラーの原因を分析することができ、ユーザーの行動を分析するためにログをビッグデータ分析に使用することもできます.それは高い価値があります.ログほど重要なプロジェクトが使用される以上、プロジェクトのために正しいログ出力ツールライブラリ、ログフレームワークを選択する必要があります.Javaでよく使われるフレームワークにはjdk logging、log 4 j、logbackなどがありますが、私たちのプロジェクトでは最終的にlogbackでログを出力することを決定し、前の2つの基礎の上でいくつかの最適化を行い、性能が高くなると感じています.
定義:
Logbackはlog 4 jの創始者によって設計されたもう一つのオープンソースログコンポーネントである.logbackは現在、logback-core、logback-classic、logback-accessの3つのモジュールに分かれています.logback-coreは他の2つのモジュールの基礎モジュールです.logback-classicはlog 4 jの改良バージョンである.さらにlogback-classicはSLF 4 J APIを完全に実現し、log 4 jやJDK 14 Loggingなどの他のログシステムに簡単に交換することができます.logback-accessアクセスモジュールとサーブレットコンテナの統合は、Httpを介してログにアクセスする機能を提供します.
メリット:
     1.切り替えが容易
Logback-classicはSLF 4 jを実現した.SLF 4 jを使用すると、logback-classicは感じられません.またlogback-classicは非常に自然にSLF 4 Jを実現するためlog 4 jまたはその他に切り替わることが非常に容易であり、使用中はほとんど区別が見られず、log 4 jを使用することで容易にlogbackに切り替わることができる.
     2.ログファイルへの自動圧縮出力
RollingFileAppenderは、新しいファイルが生成されると、すでに打たれたログファイルを自動的に圧縮します.圧縮は非同期のプロセスであるため、大きなログファイルでも圧縮中に適用されても影響を受けません. 
     3.プロファイルの自動再ロード
プロファイルが変更されると、Logback-classicはプロファイルを自動的に再ロードできます.スキャンプロセスは高速で安全であり、スキャンスレッドを別途作成する必要はありません.この技術は、JEE環境でアプリケーションが喜ぶことを十分に保証しています.
      5.パフォーマンスの向上
私たちが以前log 4 jで働いていたことに基づいて、logbackは内部の実装を書き換え、特定のシーンでは、以前の速度よりも10倍も速くすることができます.logbackのコンポーネントがより高速であることを保証するとともに、必要なメモリがより少なくなります.
特徴を理解してから、プロジェクトでどのように構成するかを見てみましょう.構成はいくつかに分けられています.同じレベルで異なるファイルに出力することもできます.クラスを指定して指定ファイルに出力することもできます.最もよく使われるのは、ログファイルが日付で出力されることです.一定のサイズに達した後、変数で増加します.オンラインログが大きすぎてログファイルを表示しにくい場合です.また、ログが大きすぎると、ログファイルを開くたびに閉じる速度が遅くなり、アプリケーションのパフォーマンスが低下します.
主にlogback.xmlでは、次のように構成されています.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="true" scan="false">

	<!-- 1. Logback tries to find a file called logback.groovy in the classpath. 
		2. If no such file is found, logback tries to find a file called logback-test.xml 
		in the classpath. 3. If no such file is found, it checks for the file logback.xml 
		in the classpath. 4. In case neither file is found, logback configures itself 
		automatically using the BasicConfigurator which will cause logging output 
		to be directed on the console. See http://logback.qos.ch/manual/configuration.html -->
		
	<contextName>agent</contextName>
	<property name="logback.logs.path" value="${catalina.base}/logs/" />
	<property name="logback.project.name" value="test" />
	<property name="project.name" value="test" />
	<!--           	 -->
	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${logback.logs.path}/${logback.project.name}.log</file>
	 	<!--            ,        ,        	 -->
	 	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${logback.logs.path}/${logback.project.name}-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
			<!--         ,       ,            	 -->
			<MaxHistory>360</MaxHistory>
			<!--            ,   100M	 -->
		    <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
		    	<MaxFileSize>100MB</MaxFileSize>
		    </TimeBasedFileNamingAndTriggeringPolicy>    
		</rollingPolicy>

		<!--             、  、   、  .   、      、      、      、    	 -->
  		<encoder>
			<pattern>%-5level^|%d{yyyy-MM-dd HH:mm:ss.SSS}^|${project.name}^|%class.%method^| %msg%n</pattern>
		</encoder>
	</appender>

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
			by default -->
		<encoder>
			<pattern>%-5level^|%d{yyyy-MM-dd HH:mm:ss.SSS}^|${project.name}^|%class.%method^|%msg%n</pattern>
		</encoder>
	</appender>

	<!-- For root loggers, log to FILE appender -->
	<root level="INFO">
		 <!-- <appender-ref ref="STDOUT" /> -->
		<appender-ref ref="FILE" /> 

	</root>


<!-- 

	<logger name="com.ibatis" level="DEBUG" />
	<logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />
	<logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
	<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"
		level="DEBUG" />
	<logger name="java.sql.Connection" level="DEBUG" />
	<logger name="java.sql.Statement" level="DEBUG" />
	<logger name="java.sql.PreparedStatement" level="DEBUG" /> 
	
  -->
  
</configuration>

ログ出力は特殊な文字で分割することをお勧めします.スペースでもいいです.awk、grepなどの名前を付けてログを分析するときに便利です.awkは良いテキスト分析コマンドで、1行を複数のフィールドに分割して出力したり、分割後の列を計算したり、列をソートしたりすることができます.