slf4j-logback

7764 ワード

前の文章ではlog 4 jの使用について述べましたが、log 4 jの次世代製品であるlogbackは将来より大きな市場と応用を持っているに違いありません.
log4j:
http://wangxinchun.iteye.com/blog/2094046
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を介して日記にアクセスする機能を提供します.
logbackのメリット:
1、機能はもっと強くて、もっと全面的で、もっと柔軟です.(これがlogbackへの移行の根本的な原因です)
2、優れた性能.(テストしたことないそうです)
Logbackのデフォルトの読み込み手順:
     (1). classpathでファイルlogback-testを検索してみます.xml;
     (2). ファイルが存在しない場合は、ファイルlogbackを検索します.xml;
     (3). 両方のファイルが存在しない場合、logbackはBas icConfiguratorで自動的に自分を構成し、記録がコンソールに出力されます.
logbackはxml構成に基づいており、公式schemaはありません.
最外層のラベルはconfigurationですが、デフォルトのxml schema図は次のとおりです.
slf4j-logback_第1张图片
上図に示すようにconfigurationの最も重要な構成ラベルはappender,logger,rootである.
logger:ログ記録を表すルール.継承ルールのある名前のlog、出力するlevelのログ、および出力する最終appenderを指定します.
name:必須の属性で、一般的にはパッケージ名で、クラス名は通過します.接続からなる文字列.
level:オプションのプロパティで、親パッケージを自然に継承するlevelプロパティが設定されていない場合はrootのlevelにプッシュします.
additivity:オプションのプロパティで、デフォルトはtrueに設定されています.falseに設定されている場合、logはloggerのappender-refにのみ出力され、出力されなくなった親loggerのappender-refは、もちろんrootのappender-refも出力されません.
loggerとlevelの継承関係は次のとおりです.
slf4j-logback_第2张图片
loggerとadditivityの関係は以下の通りです.
slf4j-logback_第3张图片
eg:

		logger.debug("hello {} ", "world");
		logger.info("hello {} ", "world");
		logger.warn("hello {} ", "world");
		logger.error("hello {} ", "world");

<logger name="com.qunar.logback.LogbackTest"  additivity="false" level="ERROR">
	   <appender-ref ref="FILE" />
	</logger>
<root level="INFO">
		<appender-ref ref="STDOUT" />
	</root>


出力:
1、additivity=false:FILEのみERRORレベルのログが出力されます.stdOUTは出力されていません.
2、additivity=true:FILE、stdOUTともにERRORログの出力があります.
注意:com.qunar.logback.LogbackTest対応のloggerのレベルはdebugに設定され、root対応のレベルはINFOですが、ファイル出力にdebugがあります.それでは説明します
loggerのレベルはrootのレベル設定を上書きします.
root:root loggerを表します.その意味の本質は依然としてloggerです.ただ特殊なのでrootラベルを個別に設定します.root loggerは普通のloggerに必要なname属性を必要としません.rootにはlevel属性が1つしかありません.デフォルトはdebugです.他の属性はサポートされていません.ただしrootは、0またはn個の要素を有することができる.
appender:コマンドライン、ファイル、データベースなど、出力のメディアを意味します.英語:an output destination is called an appender appenders exist for the console,files,remote socket servers,to MySQL,PostgreSQL,Oracle and other databases,JMS,and remote UNIX Syslog daemons.
ルール1、1つのloggerリクエスト(debug,info,error)は、loggerに関連付けられたすべてのappenderに出力され、もちろんloggerの親loggerも出力されます.
eg:

import org.slf4j.LoggerFactory;

public class LogbackTest2 {
	public static final Logger x = LoggerFactory.getLogger("a.x");
	public static final Logger y = LoggerFactory.getLogger("a.y");
	@Test
	public void testLogback() {
		x.info("hello {} ", "world");
		y.info("hello {} ", "world");
	}
}

logback.xml

	<logger name="a"  additivity="false" level="info">
	   <appender-ref ref="FILE" />
	</logger>

出力:
2014-07-22 21:00:19,835 INFO [main] a.x [LogbackTest2.java:14] hello world
2014-07-22 21:00:19,842 INFO [main] a.y [LogbackTest2.java:15] hello world
上記の例では、xとyはaのサブlogであることを説明した.したがって,xとyのリクエストはいずれもaに対応するappenderに出力される.
ルール2:
appenderの構成は比較的複雑で、対応する構成も重点と難点です.
appenderペアのschemaは次のとおりです.
slf4j-logback_第4张图片
mavenはlogbackとslf 4 jを導入する

<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.7</version>
		</dependency>

		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.0.13</version>
		</dependency>


ケース:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
    <contextName>myAppName</contextName>
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
			by default -->
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<appender name="FILE" class="ch.qos.logback.core.FileAppender">
		<file>myApp.log</file>
		<encoder>
			<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n
			</pattern>
		</encoder>
	</appender>
	
	<logger name="com.qunar.logback.LogbackTest" level="DEBUG" />
	<logger name="com.qunar.logback.LogbackTest2"  additivity="false">
	   <appender-ref ref="FILE" />
	</logger>
	<root level="INFO">
		<appender-ref ref="STDOUT" />
	</root>
</configuration>

その他:
1、グローバル属性を設定します.他の場所では%nameを直接使用できます
myAppName
eg:
%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
2、timestampラベルタイムスタンプ.

たとえば、1時間ごとにログ・ファイルを生成する必要があります.

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
		<file>log-${byHH}.log</file>
		<encoder>
			<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n
			</pattern>
		</encoder>
	</appender>