JavaSE SLF4J
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
] [
Trackback(0)
]
開始行:
#contents
*SLF4Jとは [#lcb2336e]
-http://www.slf4j.org/
-ロガーのラッパー。logback、log4j、java.util.logging の共...
-ログメッセージの作成に SLF4J の便利機能が使える
--{} (プレイスホルダ)
--メッセージの国際化
-ログ出力は log4j などで行う
-Jar ファイルの差し替えだけで、アプリ本体の変更なしに下請...
*pom.xml [#a6e6b00d]
#code(xml){{
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:...
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h...
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>SLF4JExam</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SLF4JExam</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.so...
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-ext</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
</project>
}}
-国際化が必要なければ slf4j-log4j12 だけで OK
#ref(slf4j-1.png)
*slf4j-log4j12 [#jeb13ec1]
**slf4j使用例 (App.java) [#x8ca6573]
#code(java){{
package com.mycompany.slf4jexam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
public class App {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(App.class);
// バインドしているログフレームワークのマップ化コ...
// Log 用の ThreadLocal な Map
// Log4j の MDC に対応 (NDC((スタック))に対応する...
MDC.put("uid", "USER01234");
logger.trace("Hello Trace");
logger.debug("Hello Debug");
logger.warn("Hello Warn");
logger.info("Hello Info");
logger.error("Hello Error");
// fatal は無い
logger.info("\\{} はプレースホルダ => {} is not {...
logger.info("\\{} に順版を指定できない => {1} is ...
try {
throw new NullPointerException("ぬるぽ");
} catch (NullPointerException e) {
// logback では、設定ファイルで Marker によっ...
// たとえば ERROR レベルで、syslogMarker マー...
// 運用監視するとか
//
// <turboFilter class="ch.qos.logback.classic...
// <Marker>REPORT</Marker>
// <OnMatch>ACCEPT</OnMatch>
// </turboFilter>
Marker syslogMarker = MarkerFactory.getMarker...
logger.error(syslogMarker, "エラーが発生しま...
}
// MDC は、処理終了時に必ず clear() する
// (特に Web アプリなどで ThreadPool で Thread が...
MDC.clear();
}
}
}}
**log4j.xml [#nce9ad22]
#code(xml){{
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.o...
<!-- ********************** 標準出力への出力 **********...
<appender name="STDOUT" class="org.apache.log4j.Console...
<param name="threshold" value="trace" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MMM-dd HH:mm:ss.SSS} : %-5p :...
</layout>
</appender>
<!-- ********************** /dev/nullへの出力 *********...
<appender name="NULL" class="org.apache.log4j.varia.Nul...
<param name="threshold" value="fatal"/>
</appender>
<!-- ********************** com.mycompany.slf4jexam.* ...
<logger name="com.mycompany.slf4jexam" additivity="fals...
<level value="trace" />
<appender-ref ref="STDOUT" />
</logger >
<!-- ********************** その他(ライブラリなど)は NU...
<root>
<priority value="warn" />
<appender-ref ref="NULL" />
</root>
</log4j:configuration>
}}
**実行結果 [#gbf45f76]
2013-2-08 01:27:20.056 : TRACE : USER01234 : Hello Trace
2013-2-08 01:27:20.058 : DEBUG : USER01234 : Hello Debug
2013-2-08 01:27:20.058 : WARN : USER01234 : Hello Warn
2013-2-08 01:27:20.058 : INFO : USER01234 : Hello Info
2013-2-08 01:27:20.058 : ERROR : USER01234 : Hello Error
2013-2-08 01:27:20.063 : INFO : USER01234 : {} はプレー...
2013-2-08 01:27:20.063 : INFO : USER01234 : {} に順版を...
2013-2-08 01:27:20.070 : ERROR : USER01234 : エラーが発...
java.lang.NullPointerException: ぬるぽ
at com.mycompany.slf4jexam.App.main(App.java:33)
*国際化、ログの外部定義 [#m1b07323]
slf4j-ext にある LocLogger を使う。メッセージのキーは enu...
**App2.java [#jbbd9f6e]
#code(java){{
package com.mycompany.slf4jexam;
import java.util.Locale;
import org.slf4j.cal10n.LocLogger;
public class App2 {
public static void main(String[] args) {
LocLogger logger = MyLoggerFactory.getLogger(App....
logger.info(Msg.INFORM_START_ACTION, "TEST");
// LocLogger で、外部定義のメッセージテンプレート...
// プレースホルダに順番を設定できる {0} is {1}
logger.warn(Msg.BIZERR_RESERVE_SHORTAGE, "Mario B...
// メッセージテンプレートが即値の場合には Logger ...
logger.debug("顧客ID={}, 売掛金={}, 回収金={}", 0...
logger.info(Msg.INFORM_END_ACTION, "TEST");
LocLogger logger2 = MyLoggerFactory.getLogger(App...
logger2.info(Msg.INFORM_START_ACTION, "TEST");
logger2.warn(Msg.BIZERR_RESERVE_SHORTAGE, "Mario ...
logger.debug("customer_id={}, book_credit={}, cla...
logger2.info(Msg.INFORM_END_ACTION, "TEST");
}
}
}}
**Msg.java [#ybeb4299]
#code(java){{
package com.mycompany.slf4jexam;
import ch.qos.cal10n.BaseName;
import ch.qos.cal10n.Locale;
import ch.qos.cal10n.LocaleData;
@BaseName("template")
@LocaleData( { @Locale("en_UK"), @Locale("ja_JP") })
public enum Msg {
SYSERR_CANNOT_CONNECT_DB,
BIZERR_RESERVE_SHORTAGE,
INFORM_START_ACTION,
INFORM_END_ACTION
}
}}
**MyLoggerFactory.java [#o5cd04dc]
#code(java){{
package com.mycompany.slf4jexam;
import ch.qos.cal10n.IMessageConveyor;
import ch.qos.cal10n.MessageConveyor;
import java.util.Locale;
import org.slf4j.cal10n.LocLogger;
import org.slf4j.cal10n.LocLoggerFactory;
public class MyLoggerFactory {
public static LocLogger getLogger(Class clazz) {
return getLogger(clazz, Locale.getDefault());
}
public static LocLogger getLogger(Class clazz, Locale...
IMessageConveyor messageConveyor = new MessageCon...
LocLoggerFactory factory = new LocLoggerFactory(m...
return factory.getLocLogger(clazz);
}
}
}}
**template_ja_JP.properites [#s9aafb07]
SYSERR_CANNOT_CONNECT_DB=データベース接続エラー PORT={0}...
BIZERR_RESERVE_SHORTAGE={0} 向けの債権の引き当てができま...
INFORM_START_ACTION={0} 業務開始
INFORM_END_ACTION={0} 業務終了
**template_en_GB.properties [#p2c19a11]
SYSERR_CANNOT_CONNECT_DB=DB Connection Error PORT={0}, S...
BIZERR_RESERVE_SHORTAGE=the loans of {0} will not be cov...
INFORM_START_ACTION=START {0}
INFORM_END_ACTION=END {0}
----
NetBeans いかす
#ref(slf4j-2.png)
**実行結果 [#rb77df23]
2013-2-08 01:36:58.615 : INFO : : TEST 業務開始
2013-2-08 01:36:58.621 : WARN : : Mario Bros. Co. 向け...
2013-2-08 01:36:58.624 : DEBUG : : 顧客ID=668, 売掛金=1...
2013-2-08 01:36:58.624 : INFO : : TEST 業務終了
2013-2-08 01:36:58.627 : INFO : : START TEST
2013-2-08 01:36:58.628 : WARN : : the loans of Mario B...
2013-2-08 01:36:58.628 : DEBUG : : customer_id=668, boo...
2013-2-08 01:36:58.628 : INFO : : END TEST
----
[[Java#Jakarta]]
終了行:
#contents
*SLF4Jとは [#lcb2336e]
-http://www.slf4j.org/
-ロガーのラッパー。logback、log4j、java.util.logging の共...
-ログメッセージの作成に SLF4J の便利機能が使える
--{} (プレイスホルダ)
--メッセージの国際化
-ログ出力は log4j などで行う
-Jar ファイルの差し替えだけで、アプリ本体の変更なしに下請...
*pom.xml [#a6e6b00d]
#code(xml){{
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:...
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h...
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>SLF4JExam</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SLF4JExam</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.so...
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-ext</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
</project>
}}
-国際化が必要なければ slf4j-log4j12 だけで OK
#ref(slf4j-1.png)
*slf4j-log4j12 [#jeb13ec1]
**slf4j使用例 (App.java) [#x8ca6573]
#code(java){{
package com.mycompany.slf4jexam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
public class App {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(App.class);
// バインドしているログフレームワークのマップ化コ...
// Log 用の ThreadLocal な Map
// Log4j の MDC に対応 (NDC((スタック))に対応する...
MDC.put("uid", "USER01234");
logger.trace("Hello Trace");
logger.debug("Hello Debug");
logger.warn("Hello Warn");
logger.info("Hello Info");
logger.error("Hello Error");
// fatal は無い
logger.info("\\{} はプレースホルダ => {} is not {...
logger.info("\\{} に順版を指定できない => {1} is ...
try {
throw new NullPointerException("ぬるぽ");
} catch (NullPointerException e) {
// logback では、設定ファイルで Marker によっ...
// たとえば ERROR レベルで、syslogMarker マー...
// 運用監視するとか
//
// <turboFilter class="ch.qos.logback.classic...
// <Marker>REPORT</Marker>
// <OnMatch>ACCEPT</OnMatch>
// </turboFilter>
Marker syslogMarker = MarkerFactory.getMarker...
logger.error(syslogMarker, "エラーが発生しま...
}
// MDC は、処理終了時に必ず clear() する
// (特に Web アプリなどで ThreadPool で Thread が...
MDC.clear();
}
}
}}
**log4j.xml [#nce9ad22]
#code(xml){{
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.o...
<!-- ********************** 標準出力への出力 **********...
<appender name="STDOUT" class="org.apache.log4j.Console...
<param name="threshold" value="trace" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MMM-dd HH:mm:ss.SSS} : %-5p :...
</layout>
</appender>
<!-- ********************** /dev/nullへの出力 *********...
<appender name="NULL" class="org.apache.log4j.varia.Nul...
<param name="threshold" value="fatal"/>
</appender>
<!-- ********************** com.mycompany.slf4jexam.* ...
<logger name="com.mycompany.slf4jexam" additivity="fals...
<level value="trace" />
<appender-ref ref="STDOUT" />
</logger >
<!-- ********************** その他(ライブラリなど)は NU...
<root>
<priority value="warn" />
<appender-ref ref="NULL" />
</root>
</log4j:configuration>
}}
**実行結果 [#gbf45f76]
2013-2-08 01:27:20.056 : TRACE : USER01234 : Hello Trace
2013-2-08 01:27:20.058 : DEBUG : USER01234 : Hello Debug
2013-2-08 01:27:20.058 : WARN : USER01234 : Hello Warn
2013-2-08 01:27:20.058 : INFO : USER01234 : Hello Info
2013-2-08 01:27:20.058 : ERROR : USER01234 : Hello Error
2013-2-08 01:27:20.063 : INFO : USER01234 : {} はプレー...
2013-2-08 01:27:20.063 : INFO : USER01234 : {} に順版を...
2013-2-08 01:27:20.070 : ERROR : USER01234 : エラーが発...
java.lang.NullPointerException: ぬるぽ
at com.mycompany.slf4jexam.App.main(App.java:33)
*国際化、ログの外部定義 [#m1b07323]
slf4j-ext にある LocLogger を使う。メッセージのキーは enu...
**App2.java [#jbbd9f6e]
#code(java){{
package com.mycompany.slf4jexam;
import java.util.Locale;
import org.slf4j.cal10n.LocLogger;
public class App2 {
public static void main(String[] args) {
LocLogger logger = MyLoggerFactory.getLogger(App....
logger.info(Msg.INFORM_START_ACTION, "TEST");
// LocLogger で、外部定義のメッセージテンプレート...
// プレースホルダに順番を設定できる {0} is {1}
logger.warn(Msg.BIZERR_RESERVE_SHORTAGE, "Mario B...
// メッセージテンプレートが即値の場合には Logger ...
logger.debug("顧客ID={}, 売掛金={}, 回収金={}", 0...
logger.info(Msg.INFORM_END_ACTION, "TEST");
LocLogger logger2 = MyLoggerFactory.getLogger(App...
logger2.info(Msg.INFORM_START_ACTION, "TEST");
logger2.warn(Msg.BIZERR_RESERVE_SHORTAGE, "Mario ...
logger.debug("customer_id={}, book_credit={}, cla...
logger2.info(Msg.INFORM_END_ACTION, "TEST");
}
}
}}
**Msg.java [#ybeb4299]
#code(java){{
package com.mycompany.slf4jexam;
import ch.qos.cal10n.BaseName;
import ch.qos.cal10n.Locale;
import ch.qos.cal10n.LocaleData;
@BaseName("template")
@LocaleData( { @Locale("en_UK"), @Locale("ja_JP") })
public enum Msg {
SYSERR_CANNOT_CONNECT_DB,
BIZERR_RESERVE_SHORTAGE,
INFORM_START_ACTION,
INFORM_END_ACTION
}
}}
**MyLoggerFactory.java [#o5cd04dc]
#code(java){{
package com.mycompany.slf4jexam;
import ch.qos.cal10n.IMessageConveyor;
import ch.qos.cal10n.MessageConveyor;
import java.util.Locale;
import org.slf4j.cal10n.LocLogger;
import org.slf4j.cal10n.LocLoggerFactory;
public class MyLoggerFactory {
public static LocLogger getLogger(Class clazz) {
return getLogger(clazz, Locale.getDefault());
}
public static LocLogger getLogger(Class clazz, Locale...
IMessageConveyor messageConveyor = new MessageCon...
LocLoggerFactory factory = new LocLoggerFactory(m...
return factory.getLocLogger(clazz);
}
}
}}
**template_ja_JP.properites [#s9aafb07]
SYSERR_CANNOT_CONNECT_DB=データベース接続エラー PORT={0}...
BIZERR_RESERVE_SHORTAGE={0} 向けの債権の引き当てができま...
INFORM_START_ACTION={0} 業務開始
INFORM_END_ACTION={0} 業務終了
**template_en_GB.properties [#p2c19a11]
SYSERR_CANNOT_CONNECT_DB=DB Connection Error PORT={0}, S...
BIZERR_RESERVE_SHORTAGE=the loans of {0} will not be cov...
INFORM_START_ACTION=START {0}
INFORM_END_ACTION=END {0}
----
NetBeans いかす
#ref(slf4j-2.png)
**実行結果 [#rb77df23]
2013-2-08 01:36:58.615 : INFO : : TEST 業務開始
2013-2-08 01:36:58.621 : WARN : : Mario Bros. Co. 向け...
2013-2-08 01:36:58.624 : DEBUG : : 顧客ID=668, 売掛金=1...
2013-2-08 01:36:58.624 : INFO : : TEST 業務終了
2013-2-08 01:36:58.627 : INFO : : START TEST
2013-2-08 01:36:58.628 : WARN : : the loans of Mario B...
2013-2-08 01:36:58.628 : DEBUG : : customer_id=668, boo...
2013-2-08 01:36:58.628 : INFO : : END TEST
----
[[Java#Jakarta]]
ページ名:
ISBN10
ISBN13
9784061426061