slf4j-logback
前の文章では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図は次のとおりです.
上図に示すように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の継承関係は次のとおりです.
loggerとadditivityの関係は以下の通りです.
eg:
出力:
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:
logback.xml
出力:
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は次のとおりです.
mavenはlogbackとslf 4 jを導入する
ケース:
その他:
1、グローバル属性を設定します.他の場所では%nameを直接使用できます
myAppName
eg:
%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
2、timestampラベルタイムスタンプ.
たとえば、1時間ごとにログ・ファイルを生成する必要があります.
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図は次のとおりです.
上図に示すように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の継承関係は次のとおりです.
loggerとadditivityの関係は以下の通りです.
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は次のとおりです.
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を直接使用できます
eg:
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>