SlideShare a Scribd company logo
Submit Search
Upload
Javaのログ出力: 道具と考え方
Report
Share
T
Taku Miyakawa
Follow
•
138 likes
•
74,308 views
1
of
67
Javaのログ出力: 道具と考え方
•
138 likes
•
74,308 views
Report
Share
Download Now
Download to read offline
Technology
Concepts and tools of logging in Java. Javaにおけるログ出力の考え方と道具について説明. CC Attribution Licenseの元に公開します.
Read more
T
Taku Miyakawa
Follow
Recommended
Java ORマッパー選定のポイント #jsug by
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
90.2K views
•
66 slides
Unified JVM Logging by
Unified JVM Logging
Yuji Kubota
12.9K views
•
77 slides
怖くないSpring Bootのオートコンフィグレーション by
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
3K views
•
39 slides
人生がときめくAPIテスト自動化 with Karate by
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
9.3K views
•
35 slides
Mavenの真実とウソ by
Mavenの真実とウソ
Yoshitaka Kawashima
13K views
•
67 slides
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 by
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
148.8K views
•
45 slides
More Related Content
What's hot
これからSpringを使う開発者が知っておくべきこと by
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
21.5K views
•
32 slides
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料) by
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
2.2K views
•
84 slides
今こそ知りたいSpring Batch(Spring Fest 2020講演資料) by
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
8.5K views
•
53 slides
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O... by
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
2.2K views
•
64 slides
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) by
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
2.4K views
•
30 slides
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ by
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
17.1K views
•
78 slides
What's hot
(20)
これからSpringを使う開発者が知っておくべきこと by 土岐 孝平
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
•
21.5K views
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料) by NTT DATA Technology & Innovation
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
•
2.2K views
今こそ知りたいSpring Batch(Spring Fest 2020講演資料) by NTT DATA Technology & Innovation
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
•
8.5K views
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O... by NTT DATA Technology & Innovation
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
•
2.2K views
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) by Hironobu Isoda
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
•
2.4K views
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ by Y Watanabe
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
•
17.1K views
例外設計における大罪 by Takuto Wada
例外設計における大罪
Takuto Wada
•
68.6K views
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料) by NTT DATA Technology & Innovation
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
•
1.3K views
SpringBootTest入門 by Yahoo!デベロッパーネットワーク
SpringBootTest入門
Yahoo!デベロッパーネットワーク
•
13K views
SPAセキュリティ入門~PHP Conference Japan 2021 by Hiroshi Tokumaru
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
•
99.6K views
WebSocket / WebRTCの技術紹介 by Yasuhiro Mawarimichi
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
•
50.2K views
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 - by onozaty
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
•
3.2K views
GraphQLのsubscriptionで出来ること by Shingo Fukui
GraphQLのsubscriptionで出来ること
Shingo Fukui
•
9.1K views
Where狙いのキー、order by狙いのキー by yoku0825
Where狙いのキー、order by狙いのキー
yoku0825
•
39.6K views
Metaspace by Yasumasa Suenaga
Metaspace
Yasumasa Suenaga
•
24.9K views
日本語テストメソッドについて by kumake
日本語テストメソッドについて
kumake
•
20.3K views
マルチテナント化で知っておきたいデータベースのこと by Amazon Web Services Japan
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
•
9K views
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス by Amazon Web Services Japan
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
•
56.7K views
ヤフー社内でやってるMySQLチューニングセミナー大公開 by Yahoo!デベロッパーネットワーク
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
•
95.3K views
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料) by NTT DATA Technology & Innovation
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
•
801 views
Viewers also liked
Java SE 9の紹介: モジュール・システムを中心に by
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
145.2K views
•
104 slides
金勘定のためのBigDecimalそしてMoney and Currency API by
金勘定のためのBigDecimalそしてMoney and Currency API
Taku Miyakawa
17.5K views
•
57 slides
Graph Algorithms Part 1 by
Graph Algorithms Part 1
Taku Miyakawa
882 views
•
57 slides
失敗から学ぶデータ分析グループのチームマネジメント変遷 by
失敗から学ぶデータ分析グループのチームマネジメント変遷
Tokoroten Nakayama
25.2K views
•
21 slides
Matrix Multiplication in Strassen Algorithm by
Matrix Multiplication in Strassen Algorithm
Taku Miyakawa
1.6K views
•
9 slides
Quasar: Actor Model and Light Weight Threads on Java by
Quasar: Actor Model and Light Weight Threads on Java
Taku Miyakawa
4.1K views
•
10 slides
Viewers also liked
(20)
Java SE 9の紹介: モジュール・システムを中心に by Taku Miyakawa
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
•
145.2K views
金勘定のためのBigDecimalそしてMoney and Currency API by Taku Miyakawa
金勘定のためのBigDecimalそしてMoney and Currency API
Taku Miyakawa
•
17.5K views
Graph Algorithms Part 1 by Taku Miyakawa
Graph Algorithms Part 1
Taku Miyakawa
•
882 views
失敗から学ぶデータ分析グループのチームマネジメント変遷 by Tokoroten Nakayama
失敗から学ぶデータ分析グループのチームマネジメント変遷
Tokoroten Nakayama
•
25.2K views
Matrix Multiplication in Strassen Algorithm by Taku Miyakawa
Matrix Multiplication in Strassen Algorithm
Taku Miyakawa
•
1.6K views
Quasar: Actor Model and Light Weight Threads on Java by Taku Miyakawa
Quasar: Actor Model and Light Weight Threads on Java
Taku Miyakawa
•
4.1K views
ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business by Tokoroten Nakayama
ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
Tokoroten Nakayama
•
18.2K views
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」 by Hiroyuki Ohnaka
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
Hiroyuki Ohnaka
•
6.2K views
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ... by Toshiaki Maki
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
Toshiaki Maki
•
11.5K views
Java オブジェクトの内部構造 by Taku Miyakawa
Java オブジェクトの内部構造
Taku Miyakawa
•
2.3K views
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2 by Masatoshi Tada
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
•
54.9K views
深層学習フレームワーク Chainer の開発と今後の展開 by Seiya Tokui
深層学習フレームワーク Chainer の開発と今後の展開
Seiya Tokui
•
26.9K views
擬似乱数生成器の評価 by Taku Miyakawa
擬似乱数生成器の評価
Taku Miyakawa
•
5.4K views
Summary of "Hacking", 0x351-0x354 by Taku Miyakawa
Summary of "Hacking", 0x351-0x354
Taku Miyakawa
•
1.9K views
Hadoop jobbuilder by Taku Miyakawa
Hadoop jobbuilder
Taku Miyakawa
•
1K views
Kink の宣伝 by Taku Miyakawa
Kink の宣伝
Taku Miyakawa
•
2.7K views
Kink: invokedynamic on a prototype-based language by Taku Miyakawa
Kink: invokedynamic on a prototype-based language
Taku Miyakawa
•
1.8K views
Kink: プロトタイプベースの俺々 JVM 言語 by Taku Miyakawa
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
•
2.4K views
コルーチンの実装について by Taku Miyakawa
コルーチンの実装について
Taku Miyakawa
•
3.3K views
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6 by Yuji Kubota
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Yuji Kubota
•
74.8K views
Similar to Javaのログ出力: 道具と考え方
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる by
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
3.7K views
•
88 slides
JSDoc ToolKit by
JSDoc ToolKit
Ryo Maruyama
741 views
•
14 slides
Leiningen超速入門 by
Leiningen超速入門
Kiyotaka Kunihira
3.4K views
•
27 slides
Panamaを先取り!? JVMCIでJITと遊ぶ by
Panamaを先取り!? JVMCIでJITと遊ぶ
Yasumasa Suenaga
4.6K views
•
111 slides
Jvm internal by
Jvm internal
Go Tanaka
5.9K views
•
44 slides
How to run P4 BMv2 by
How to run P4 BMv2
Kentaro Ebisawa
9.1K views
•
22 slides
Similar to Javaのログ出力: 道具と考え方
(20)
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる by Koichi Sakata
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
•
3.7K views
JSDoc ToolKit by Ryo Maruyama
JSDoc ToolKit
Ryo Maruyama
•
741 views
Leiningen超速入門 by Kiyotaka Kunihira
Leiningen超速入門
Kiyotaka Kunihira
•
3.4K views
Panamaを先取り!? JVMCIでJITと遊ぶ by Yasumasa Suenaga
Panamaを先取り!? JVMCIでJITと遊ぶ
Yasumasa Suenaga
•
4.6K views
Jvm internal by Go Tanaka
Jvm internal
Go Tanaka
•
5.9K views
How to run P4 BMv2 by Kentaro Ebisawa
How to run P4 BMv2
Kentaro Ebisawa
•
9.1K views
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会 by Shigeru Hanada
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Shigeru Hanada
•
8.8K views
クラスローダーについて by Suguru ARAKAWA
クラスローダーについて
Suguru ARAKAWA
•
9.4K views
RgGen ご紹介 by Taichi Ishitani
RgGen ご紹介
Taichi Ishitani
•
102 views
Grails 2.0.0.M1の話 by Tsuyoshi Yamamoto
Grails 2.0.0.M1の話
Tsuyoshi Yamamoto
•
2.8K views
Haikara by jewel12
Haikara
jewel12
•
694 views
Programming camp 2008, Codereading by Hiro Yoshioka
Programming camp 2008, Codereading
Hiro Yoshioka
•
303 views
MediaRecorder と WebM で、オレオレ Live Streaming by mganeko
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
•
15.2K views
Programming camp Codereading by Hiro Yoshioka
Programming camp Codereading
Hiro Yoshioka
•
461 views
ClassLoader Leak Patterns by nekop
ClassLoader Leak Patterns
nekop
•
8.9K views
Lombok ハンズオン by Hiroto Yamakawa
Lombok ハンズオン
Hiroto Yamakawa
•
2.4K views
実践Go ツールの作成から配布まで by Yusuke Miyake
実践Go ツールの作成から配布まで
Yusuke Miyake
•
7.7K views
企業におけるSpring@日本springユーザー会20090624 by Yusuke Suzuki
企業におけるSpring@日本springユーザー会20090624
Yusuke Suzuki
•
1.9K views
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている by Koichi Sakata
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
•
4.1K views
Pythonで検索エンジン2 by Yasukazu Kawasaki
Pythonで検索エンジン2
Yasukazu Kawasaki
•
1.9K views
More from Taku Miyakawa
言語設計者が意味論を書くときに考えていたこと by
言語設計者が意味論を書くときに考えていたこと
Taku Miyakawa
4K views
•
11 slides
ラムダと invokedynamic の蜜月 by
ラムダと invokedynamic の蜜月
Taku Miyakawa
11.2K views
•
51 slides
Java Quine Golf by
Java Quine Golf
Taku Miyakawa
1.5K views
•
12 slides
Processing LTSV by Apache Pig by
Processing LTSV by Apache Pig
Taku Miyakawa
1.3K views
•
13 slides
Java 7 invokedynamic の概要 by
Java 7 invokedynamic の概要
Taku Miyakawa
8.6K views
•
39 slides
Kink: developing a programming language on the JVM by
Kink: developing a programming language on the JVM
Taku Miyakawa
625 views
•
8 slides
More from Taku Miyakawa
(6)
言語設計者が意味論を書くときに考えていたこと by Taku Miyakawa
言語設計者が意味論を書くときに考えていたこと
Taku Miyakawa
•
4K views
ラムダと invokedynamic の蜜月 by Taku Miyakawa
ラムダと invokedynamic の蜜月
Taku Miyakawa
•
11.2K views
Java Quine Golf by Taku Miyakawa
Java Quine Golf
Taku Miyakawa
•
1.5K views
Processing LTSV by Apache Pig by Taku Miyakawa
Processing LTSV by Apache Pig
Taku Miyakawa
•
1.3K views
Java 7 invokedynamic の概要 by Taku Miyakawa
Java 7 invokedynamic の概要
Taku Miyakawa
•
8.6K views
Kink: developing a programming language on the JVM by Taku Miyakawa
Kink: developing a programming language on the JVM
Taku Miyakawa
•
625 views
Recently uploaded
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
146 views
•
64 slides
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PC Cluster Consortium
66 views
•
12 slides
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
10 views
•
22 slides
光コラボは契約してはいけない by
光コラボは契約してはいけない
Takuya Matsunaga
28 views
•
17 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
109 views
•
26 slides
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PC Cluster Consortium
28 views
•
36 slides
Recently uploaded
(7)
定例会スライド_キャチs 公開用.pdf by Keio Robotics Association
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
•
146 views
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PC Cluster Consortium
•
66 views
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by Hitachi, Ltd. OSS Solution Center.
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
•
10 views
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない
Takuya Matsunaga
•
28 views
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by Hitachi, Ltd. OSS Solution Center.
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
•
109 views
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PC Cluster Consortium
•
28 views
IPsec VPNとSSL-VPNの違い by 富士通クラウドテクノロジーズ株式会社
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
•
606 views
Javaのログ出力: 道具と考え方
1.
Javaのログ出力: 道具と考え方 2015-10-14 JJUGナイトセミナー ハッシュタグ:
#jjug 宮川 拓
2.
@miyakawa_taku JJUG幹事
SI屋で賃労働 尾上部屋の里山関のファンです オレオレJVM言語Kinkを作っています https://bitbucket.org/kink/kink 自己紹介 #jjug 2/67
3.
#jjugログとは! 例: $ kink -Vdebug
-e '' 2015-10-04 15:58:29 [main] DEBUG BoxingValues - use box proto listener org.kink_lang.kink.internal.eval.VarAssignEvaluator$VarAssignListener@3af49f1c 2015-10-04 15:58:29 [main] DEBUG BoxingValues - use box proto listener org.kink_lang.kink.internal.eval.ArgsPassingEvaluator$ListAssignListener@1c20c684 2015-10-04 15:58:29 [main] DEBUG BoxingValues - use box proto listener org.kink_lang.kink.internal.eval.ThenUtils$BoolThenListener@1218025c 2015-10-04 15:58:29 [main] DEBUG BoxingValues - Setup prototype for java.lang.String 2015-10-04 15:58:29 [main] DEBUG Modules - Load module _enhance/java/lang/Object from org.kink_lang.kink.internal.box.ObjectEnhancer@5e8c92f4 2015-10-04 15:58:29 [main] INFO Definer - org.kink_lang.kink.internal.define.frequency_threshold=128 ... システムの状態を 後から見られるように出力したテキスト 3/67
4.
なんで「ログ」って言うの? #jjug 4/67
5.
なんで「ログ」って言うの? #jjug log =
丸太 5/67
6.
なんで「ログ」って言うの? #jjug log =
船の速度標 丸太 (log) を引っ張る綱の張りで 船の速度を測った 6/67
7.
なんで「ログ」って言うの? #jjug logbook =
航海日誌 Photo by vxla, Licensed as CC BY 2.0, https://www.flickr.com/photos/vxla/5779530912/ logで測った速度や方向などを 帳面 (logbook) につける 7/67
8.
ログファイル = システムの航海日誌! #jjug 8/67
9.
セッション内容 #jjug なぜログ? ログの道具 Javaのログ 9/67
10.
そもそも 何のためにログを出すの? #jjug 10/67
11.
ログの主な目的 #jjug 不具合解析のため 来るべき故障の際に、 原因となった不具合が突き止められるようにするため、 システム稼働時の内部状態を記録する ※本セッションで主に扱う 監査のため 認証・入出金・個人情報の利用など、 残しておく必要のあるイベントの発生を記録する 11/67
12.
テストが完璧なら/デバッガがあれば ログがなくても不具合解析できる? #jjug 12/67
13.
#jjugvs テスト テストとログは相補的な関係 テストの領分 個別具体的な要件について不具合がないことを、 ある程度保証する
個別を積み重ねて全体に近づく ログの領分 しかし完璧なテストはなく、たぶん故障は起きる。 起きた故障を解析するためにはログが必要 ログは、開発・テスト時にシステムの動きを把握 するのにも有用 13/67
14.
#jjugvs デバッガ デバッガとログも相補的な関係 デバッガの領分 動作中のシステムの状態が閲覧・変更できる ログの領分
過去のシステムの状態が閲覧できる 本番システムで利用できる 再現させるための条件が厳しかったり、不明だっ たりする故障について、故障発生前後の状況が 追跡できる 14/67
15.
ログの目的 まとめ #jjug 15/67
16.
#jjugログの目的 まとめ ログの目的は不具合解析/監査 システムの過去の状態が分かるのが素敵 不具合解析の手段として、テストや デバッガとは相補的な関係 16/67
17.
セッション内容 #jjug なぜログ? ログの道具 Javaのログ 17/67
18.
#jjug問題設定 ログを出すためには どんな道具を使えばよいのでしょうか? 18/67
19.
#jjug標準エラーにログを出す? Unix由来の慣習では、ログは一般に 標準エラー出力に書き出されます 例: System.err.println( "ひらく夢などあるじゃなし"); しかし本格的なプログラムでは、 標準エラーへの直接出力は力不足です 19/67
20.
ログの道具に必要な特性 #jjug 20/67
21.
#jjugログの道具に必要な特性 ログの各行がいつ、どこで出力されたか、 文脈が分かるようにできる必要がある いつ どこで 日付時刻 ファイル/行/クラス/メソッド スレッド HTTPセッション/リクエスト これら文脈が分かると不具合解析がはかどります 21/67
22.
#jjugログの道具に必要な特性 一部のログ出力が抑止できる必要がある 開発環境 DEBUG doGet開始 INFO 注文#42を閲覧 DEBUG
SELECT xxx FROM ... WARN Bobは注文#42を閲覧不可 DEBUG doGet終了 本番環境 INFO 注文#42を閲覧 WARN Bobは注文#42を閲覧不可 ディスク領域節約・性能確保のため、 重要でないログの出力を抑止することがあります 22/67
23.
#jjugログの道具に必要な特性 その他 ログ出力先が簡単に切り替えられること ログローテーションできること
複数スレッドからログが出力できること ディスクまで確実に書き込むこと 速いこと 例外を投げないこと …… 23/67
24.
#jjugログの道具 ログの道具の諸特性を提供するため、 多くの言語は専用ライブラリを 用意しています Ruby logging添付ライブラリ Python loggingモジュール Java Log4j,
java.util.logging, Commons Logging, SLF4J, Logback, JBoss Logging, Log4j2, .... 24/67
25.
セッション内容 #jjug なぜログ? ログの道具 Javaのログ 25/67
26.
#jjug問題 次の中で 役割が異るライブラリはどれでしょう? A) java.util.logging B) Log4j C)
Logback D) SLF4J 26/67
27.
ログファサードライブラリ ログ出力ライブラリ #jjug解答 SLF4Jは他のライブラリにログ出力を 委譲するログファサードライブラリです A) java.util.logging B) Log4j C)
Logback D) SLF4J 27/67
28.
ログ関連ライブラリの分類 #jjug ログファサードライブラリ ログ出力ライブラリ Log4j java.util.logging Logback Log4j2 Commons Logging SLF4J JBoss
Logging 28/67
29.
ログ出力の階層 #jjug アプリケーション ログファサードライブラリ ログ出力ライブラリ ファイル/コンソール/... ど う
考 え て も 本 質 的 に は 要 ら な い も の なぜこんなことになったのか それを知るには歴史を紐解く必要があります 29/67
30.
Javaのログライブラリの歴史 #jjug 30/67
31.
Javaのログライブラリの歴史 #jjug ~1999 前史時代 31/67
32.
前史時代 #jjug Apache Tomcat
3.0(最初期リリース) // org.apache.tomcat.core.ServletContextFacade public void log(String msg) { System.err.println(msg); } 32/67
33.
Javaのログライブラリの歴史 #jjug ~1999 1999 前史時代 Log4jの登場 33/67
34.
Log4jの登場 #jjug import org.apache.log4j.Logger; public
class EchoServlet extends HttpServlet { private Logger logger = Logger.getLogger(getClass()); protected void doGet( HttpServletRequest req, HttpServletResponse resp) { String text = req.getParameter("text"); this.logger.info("テキスト: " + text); ... } } Log4jを使うサーブレットの例: 34/67
35.
#jjugLog4jはすごい! ログライブラリの事実上の標準に しばらくはAvalon Logkitも有力だった 後続のログ関連ライブラリはだいたい Log4jの機能を踏襲
階層化されたロガー ログ書き込みを行うアペンダ MDCによる文脈情報の保持 35/67
36.
#jjug階層化されたロガー ロガーはドット区切りのロガー名で 階層化されています ふつうはログ書き出し元のクラス名を そのままロガー名にします 基本的に親の設定を継承します 36/67
37.
階層化されたロガー #jjug ロ ガ
ー org.kink_lang レ ベ ル = WARN ア ペ ン ダ =ConsoleAppender org.kink_lang.kink レ ベ ル = DEBUG ア ペ ン ダ =ConsoleAppender( 継 承 ) org.kink_lang.kink.Value レ ベ ル = DEBUG( 継 承 ) ア ペ ン ダ =ConsoleAppender( 継 承 ) + RollingFileAppender WARN, ERROR, FATAL の ロ グ を コ ン ソ ー ル に 出 す 加 え て DEBUG, INFO の ロ グ も コ ン ソ ー ル に 出 す コ ン ソ ー ル に 加 え て フ ァ イ ル に も ロ グ を 出 す 37/67
38.
#jjugMDC 実行時文脈の値を入れておく スレッドローカルなHashMap ログ行の一部として出力できます 有用な実行時文脈: セッションID, リクエストID
テスト名 38/67
39.
#jjugMDC 例: リクエストIDを設定するフィルタ import org.apache.log4j.MDC; public
class PutRequestIdFilter implements Filter { public void doFilter ( ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { String reqId = UUID.randomUUID().toString(); MDC.put("request", reqId); try { chain.doFilter(req, resp); } finally { MDC.remove("request"); } } ... } 39/67
40.
Javaのログライブラリの歴史 #jjug ~1999 1999 2000 前史時代 Log4jの登場 java.util.logging規格化開始 40/67
41.
#jjugjava.util.logging Log4jを参考にJSR47として規格化 → 2002年のJ2SE 1.4に採用 41/67
42.
java.util.logging #jjug Log4jとだいたいおなじ! import java.util.logging.Logger; public
class EchoServlet extends HttpServlet { private Logger logger = Logger.getLogger(getClass().getName()); protected void doGet( HttpServletRequest req, HttpServletResponse resp) { String text = req.getParameter("text"); this.logger.info("テキスト: " + text); ... } } Log4j と の 差 分 42/67
43.
#jjugjava.util.logging Log4jの牙城を崩すには至らず ログレベルが謎 SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST
デフォルトの書式が扱いづらい ハンドラ(=アペンダ)の実装が不足 Java 1.3以前で使えない JVM全体で1つの設定しか持てない サーブレットコンテナ下で、各アプリケーションが 個別のログ設定を持つための組み込みの方法がない 43/67
44.
Javaのログライブラリの歴史 #jjug ~1999 1999 2000 2001 前史時代 Log4jの登場 java.util.logging規格化開始 Commons Loggingの登場 44/67
45.
#jjugCommons Loggingの登場 Commons HttpClientから派生した ログファサードライブラリ
HttpClientのような便利ライブラリが、 特定のログ実装に依存するのはちょっと、 という理由ではじまった Log4jやjava.util.loggingを切り替えて 使えるようになる(はずだった) 45/67
46.
Commons Logging #jjug import
org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class EchoServlet extends HttpServlet { private Log logger = LogFactory.getLog(getClass()); protected void doGet( HttpServletRequest req, HttpServletResponse resp) { String text = req.getParameter("text"); this.logger.info("テキスト: " + text); ... } } Log4jとだいたいおなじ! Log4j と の 差 分 46/67
47.
#jjugCommons Logging 多くのライブラリ・フレームワークが 採用しています でも正直イケていません ログ実装の選択方法がぶっ壊れている ためです 47/67
48.
#jjugCommons Logging 実現したかったこと(のひとつ) A P
サ ー バ 共 有 ラ イ ブ ラ リ ア プ リ A ア プ リ B Commons Logging ロ グ via Log4j ロ グ via java.util.logging ログ実装の決定方法 Context Classloaderから始まって、 親・祖先のクラスローダ内でアダプタクラスを探索 最初にみつかったアダプタを使う 48/67
49.
#jjugCommons Logging 実際にはうまく行っていません Java EEコンテナ OSGiコンテナ クラスローダ不一致による NoClassDefFoundErrorの頻発 →
アドホックな try-catchで対処 動かすための設定が非直感的 かつAPサーバごとに 異なる Context Classloaderを 使 っ て お ら ず 親 ク ラスローダへの委譲もない → そもそも動かない 動的探索という構想に無理がありました 49/67
50.
Javaのログライブラリの歴史 #jjug ~1999 1999 2000 2001 2005 前史時代 Log4jの登場 java.util.logging規格化開始 Commons Loggingの登場 SLF4J
/ Logback 50/67
51.
#jjugSLF4J / Logback Log4jの開発者Ceki
Gülcüが、 開発の遅延に愛想を尽かして立ち上げた プロジェクト SLF4J Logback ログファサードライブラリ ログ出力ライブラリ SLF4Jと組み合わせて使う前提 2015年現在のデファクトスタンダード 51/67
52.
SLF4J / Logback
#jjug import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class EchoServlet extends HttpServlet { private Logger logger = LoggerFactory.getLogger(getClass()); protected void doGet( HttpServletRequest req, HttpServletResponse resp) { String text = req.getParameter("text"); this.logger.info("テキスト: {}", text); ... } } やっぱりLog4jとだいたいおなじ Log4j と の 差 分 52/67
53.
#jjugSLF4J 特徴 クラス実体の差し替えによる アダプタの静的なバインディング 他のログファサード/ログ実装に 流し込まれるログを乗っ取る仕組み 53/67
54.
#jjugSLF4J 必要なJAR slf4j-api-*.jarAPI(必須) ログ実装への バインディング (どれか一個) logback-classic-*.jar (Logback) slf4j-log4j12-*.jar
(Log4j) slf4j-jdk14-*.jar (java.util.logging) log4j-slf4j-impl-*.jar (Log4j2) 両方のJARを 同一のクラスローダが参照する場所に配置します 54/67
55.
#jjugSLF4J 静的バインディングの中身 LoggerFactory アプリ StaticLoggerBinder getLogger() getSingleton() バ イ ン
デ ィ ン グ の J A R 内 に 同 名 の ク ラ ス が そ れ ぞ れ 存 在 slf4j-api-*.jarに存在 55/67
56.
#jjugSLF4J 多くのライブラリはSLF4Jではなく Log4jやCommons Loggingなどを 叩いています ログ設定を統合するためには、これらを SLF4Jに横取りする必要があります 56/67
57.
#jjugSLF4J ログの横取り Log4j java.util.logging Commons Logging log4j-over-slf4j-*.jar Log4j と同名のクラスを提供 実際には SLF4Jに流し込む jcl-over-slf4j-*.jar Commons
Loggingと同名のクラスを提供 実際には SLF4Jに流し込む jul-to-slf4j-*.jar SLF4Jに流し込むハンドラを提供 slf4j-api-*.jarと同じ場所に配置します 57/67
58.
#jjugLogback 独自のロガーインタフェースを持たず、 SLF4J経由で呼び出します 提供する機能 マーカー ログ行のラベル的なもの
マーカー「 auth」がついてるログは auth.logに 出す、みたいなことができます 設定のリロード アプリごとにログ出力先を分ける機能 58/67
59.
Javaのログライブラリの歴史 #jjug ~1999 1999 2000 2001 2005 前史時代 Log4jの登場 java.util.logging規格化開始 Commons Loggingの登場 SLF4J
/ Logback 2014 Log4j2 59/67
60.
#jjugLog4j2 Log4j 1.2系と互換性のない新しい実装 機能・構成はLogbackに似ています 60/67
61.
Log4j2 #jjug import org.apache.logging.log4j.Logger; import
org.apache.logging.log4j.LogManager; public class EchoServlet extends HttpServlet { private Logger logger = LogManager.getLogger(getClass()); protected void doGet( HttpServletRequest req, HttpServletResponse resp) { String text = req.getParameter("text"); this.logger.info("テキスト: {}", text); ... } } 早い話がLog4jです Log4j と の 差 分 61/67
62.
結局なにを使えばいいの? #jjug 62/67
63.
#jjug使うべきログ関連ライブラリ 共有ライブラリ SLF4Jにログを出す compileスコープでは ログ実装ライブラリに依存しない
テストでは好みのログ実装を使う Gradle dependencies: compile 'org.slf4j:slf4j-api:1.7.12' testCompile 'ch.qos.logback:logback-core:1.1.3' testCompile 'ch.qos.logback:logback-classic:1.1.3' 63/67
64.
#jjug使うべきログ関連ライブラリ アプリケーション 基盤・ミドルウェアの制約しだい 制約がなければSLF4J+Logbackが無難
Log4j(1/2)やjava.util.loggingを直接叩く のも可ですが、あえてSLF4Jを避ける 理由はなさそう 64/67
65.
Javaのログ まとめ #jjug 65/67
66.
#jjugJavaのログ まとめ Log4jがJavaのログの道具立てを 作った
ロガー/アペンダ/MDC... ライブラリの依存性の都合から ログファサードが生まれた SLF4Jを使っておけばとりあえずOK 66/67
67.
セッション内容 #jjug なぜログ? ログの道具 Javaのログ 67/67