Movatterモバイル変換
[0]
ホーム
URL:
画像なし
夜間モード
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
TM
Uploaded by
Taku Miyakawa
PDF, PPTX
78,740 views
Javaのログ出力: 道具と考え方
Concepts and tools of logging in Java.Javaにおけるログ出力の考え方と道具について説明.CC Attribution Licenseの元に公開します.
Technology
◦
Read more
138
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 67
2
/ 67
3
/ 67
4
/ 67
5
/ 67
6
/ 67
7
/ 67
8
/ 67
9
/ 67
10
/ 67
11
/ 67
12
/ 67
13
/ 67
14
/ 67
15
/ 67
16
/ 67
17
/ 67
18
/ 67
19
/ 67
20
/ 67
21
/ 67
22
/ 67
23
/ 67
24
/ 67
25
/ 67
26
/ 67
27
/ 67
28
/ 67
29
/ 67
30
/ 67
31
/ 67
32
/ 67
33
/ 67
34
/ 67
35
/ 67
36
/ 67
Most read
37
/ 67
38
/ 67
39
/ 67
40
/ 67
41
/ 67
42
/ 67
43
/ 67
44
/ 67
45
/ 67
46
/ 67
47
/ 67
48
/ 67
49
/ 67
50
/ 67
51
/ 67
52
/ 67
53
/ 67
54
/ 67
Most read
55
/ 67
Most read
56
/ 67
57
/ 67
58
/ 67
59
/ 67
60
/ 67
61
/ 67
62
/ 67
63
/ 67
64
/ 67
65
/ 67
66
/ 67
67
/ 67
Recommended
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
by
JustSystems Corporation
PDF
例外設計における大罪
by
Takuto Wada
PDF
Serverless時代のJavaについて
by
Amazon Web Services Japan
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
PDF
入社1年目のプログラミング初心者がSpringを学ぶための手引き
by
土岐 孝平
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
怖くないSpring Bootのオートコンフィグレーション
by
土岐 孝平
PDF
PlaySQLAlchemy: SQLAlchemy入門
by
泰 増田
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
by
onozaty
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
PPTX
Metaspace
by
Yasumasa Suenaga
PDF
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
PDF
SpringBootTest入門
by
Yahoo!デベロッパーネットワーク
PDF
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
by
ssuser070fa9
PDF
Spring Bootをはじめる時にやるべき10のこと
by
心 谷本
PDF
Dockerfileを改善するためのBest Practice 2019年版
by
Masahito Zembutsu
PDF
Unified JVM Logging
by
Yuji Kubota
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
PDF
MySQL 5.7にやられないためにおぼえておいてほしいこと
by
yoku0825
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
PDF
Mavenの真実とウソ
by
Yoshitaka Kawashima
PDF
Spring Boot × Vue.jsでSPAを作る
by
Go Miyasaka
PPTX
さくっと理解するSpring bootの仕組み
by
Takeshi Ogawa
PPT
Glibc malloc internal
by
Motohiro KOSAKI
PDF
そんなトランザクションマネージャで大丈夫か?
by
takezoe
PDF
オンラインゲームの仕組みと工夫
by
Yuta Imai
PDF
イミュータブルデータモデル(世代編)
by
Yoshitaka Kawashima
PDF
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
PDF
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
by
Yuji Kubota
PDF
金勘定のためのBigDecimalそしてMoney and Currency API
by
Taku Miyakawa
More Related Content
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
by
JustSystems Corporation
PDF
例外設計における大罪
by
Takuto Wada
PDF
Serverless時代のJavaについて
by
Amazon Web Services Japan
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
PDF
入社1年目のプログラミング初心者がSpringを学ぶための手引き
by
土岐 孝平
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
怖くないSpring Bootのオートコンフィグレーション
by
土岐 孝平
PDF
PlaySQLAlchemy: SQLAlchemy入門
by
泰 増田
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
by
JustSystems Corporation
例外設計における大罪
by
Takuto Wada
Serverless時代のJavaについて
by
Amazon Web Services Japan
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
入社1年目のプログラミング初心者がSpringを学ぶための手引き
by
土岐 孝平
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
怖くないSpring Bootのオートコンフィグレーション
by
土岐 孝平
PlaySQLAlchemy: SQLAlchemy入門
by
泰 増田
What's hot
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
by
onozaty
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
PPTX
Metaspace
by
Yasumasa Suenaga
PDF
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
PDF
SpringBootTest入門
by
Yahoo!デベロッパーネットワーク
PDF
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
by
ssuser070fa9
PDF
Spring Bootをはじめる時にやるべき10のこと
by
心 谷本
PDF
Dockerfileを改善するためのBest Practice 2019年版
by
Masahito Zembutsu
PDF
Unified JVM Logging
by
Yuji Kubota
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
PDF
MySQL 5.7にやられないためにおぼえておいてほしいこと
by
yoku0825
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
PDF
Mavenの真実とウソ
by
Yoshitaka Kawashima
PDF
Spring Boot × Vue.jsでSPAを作る
by
Go Miyasaka
PPTX
さくっと理解するSpring bootの仕組み
by
Takeshi Ogawa
PPT
Glibc malloc internal
by
Motohiro KOSAKI
PDF
そんなトランザクションマネージャで大丈夫か?
by
takezoe
PDF
オンラインゲームの仕組みと工夫
by
Yuta Imai
PDF
イミュータブルデータモデル(世代編)
by
Yoshitaka Kawashima
PDF
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
by
onozaty
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
Metaspace
by
Yasumasa Suenaga
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
SpringBootTest入門
by
Yahoo!デベロッパーネットワーク
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
by
ssuser070fa9
Spring Bootをはじめる時にやるべき10のこと
by
心 谷本
Dockerfileを改善するためのBest Practice 2019年版
by
Masahito Zembutsu
Unified JVM Logging
by
Yuji Kubota
マイクロサービス 4つの分割アプローチ
by
増田 亨
MySQL 5.7にやられないためにおぼえておいてほしいこと
by
yoku0825
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
Mavenの真実とウソ
by
Yoshitaka Kawashima
Spring Boot × Vue.jsでSPAを作る
by
Go Miyasaka
さくっと理解するSpring bootの仕組み
by
Takeshi Ogawa
Glibc malloc internal
by
Motohiro KOSAKI
そんなトランザクションマネージャで大丈夫か?
by
takezoe
オンラインゲームの仕組みと工夫
by
Yuta Imai
イミュータブルデータモデル(世代編)
by
Yoshitaka Kawashima
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
Viewers also liked
PDF
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
by
Yuji Kubota
PDF
金勘定のためのBigDecimalそしてMoney and Currency API
by
Taku Miyakawa
PDF
Java SE 9の紹介: モジュール・システムを中心に
by
Taku Miyakawa
PPTX
ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
by
Tokoroten Nakayama
PDF
擬似乱数生成器の評価
by
Taku Miyakawa
PPTX
失敗から学ぶデータ分析グループのチームマネジメント変遷
by
Tokoroten Nakayama
PDF
Kink: プロトタイプベースの俺々 JVM 言語
by
Taku Miyakawa
PDF
コルーチンの実装について
by
Taku Miyakawa
PDF
Java オブジェクトの内部構造
by
Taku Miyakawa
PDF
Prepare for Java 9 #jjug
by
Yuji Kubota
PDF
Matrix Multiplication in Strassen Algorithm
by
Taku Miyakawa
PDF
Summary of "Hacking", 0x351-0x354
by
Taku Miyakawa
PDF
Kink: invokedynamic on a prototype-based language
by
Taku Miyakawa
PDF
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
by
Toshiaki Maki
PDF
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
by
Hiroyuki Ohnaka
PDF
Kink の宣伝
by
Taku Miyakawa
PDF
Hadoop jobbuilder
by
Taku Miyakawa
PDF
Quasar: Actor Model and Light Weight Threads on Java
by
Taku Miyakawa
PDF
深層学習フレームワーク Chainer の開発と今後の展開
by
Seiya Tokui
PDF
Graph Algorithms Part 1
by
Taku Miyakawa
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
by
Yuji Kubota
金勘定のためのBigDecimalそしてMoney and Currency API
by
Taku Miyakawa
Java SE 9の紹介: モジュール・システムを中心に
by
Taku Miyakawa
ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
by
Tokoroten Nakayama
擬似乱数生成器の評価
by
Taku Miyakawa
失敗から学ぶデータ分析グループのチームマネジメント変遷
by
Tokoroten Nakayama
Kink: プロトタイプベースの俺々 JVM 言語
by
Taku Miyakawa
コルーチンの実装について
by
Taku Miyakawa
Java オブジェクトの内部構造
by
Taku Miyakawa
Prepare for Java 9 #jjug
by
Yuji Kubota
Matrix Multiplication in Strassen Algorithm
by
Taku Miyakawa
Summary of "Hacking", 0x351-0x354
by
Taku Miyakawa
Kink: invokedynamic on a prototype-based language
by
Taku Miyakawa
#jjug_ccc #ccc_gh5 What's new in Spring Framework 4.3 / Boot 1.4 + Pivotal's ...
by
Toshiaki Maki
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
by
Hiroyuki Ohnaka
Kink の宣伝
by
Taku Miyakawa
Hadoop jobbuilder
by
Taku Miyakawa
Quasar: Actor Model and Light Weight Threads on Java
by
Taku Miyakawa
深層学習フレームワーク Chainer の開発と今後の展開
by
Seiya Tokui
Graph Algorithms Part 1
by
Taku Miyakawa
More from Taku Miyakawa
PDF
ラムダと invokedynamic の蜜月
by
Taku Miyakawa
PDF
言語設計者が意味論を書くときに考えていたこと
by
Taku Miyakawa
PDF
Kink: developing a programming language on the JVM
by
Taku Miyakawa
PDF
Java 7 invokedynamic の概要
by
Taku Miyakawa
PDF
Processing LTSV by Apache Pig
by
Taku Miyakawa
PDF
Java Quine Golf
by
Taku Miyakawa
ラムダと invokedynamic の蜜月
by
Taku Miyakawa
言語設計者が意味論を書くときに考えていたこと
by
Taku Miyakawa
Kink: developing a programming language on the JVM
by
Taku Miyakawa
Java 7 invokedynamic の概要
by
Taku Miyakawa
Processing LTSV by Apache Pig
by
Taku Miyakawa
Java Quine Golf
by
Taku Miyakawa
Javaのログ出力: 道具と考え方
1.
Javaのログ出力: 道具と考え方2015-10-14 JJUGナイトセミナーハッシュタグ:
#jjug宮川 拓
2.
@miyakawa_taku JJUG幹事
SI屋で賃労働 尾上部屋の里山関のファンです オレオレJVM言語Kinkを作っていますhttps://bitbucket.org/kink/kink自己紹介 #jjug2/67
3.
#jjugログとは!例:$ kink -Vdebug
-e ''2015-10-04 15:58:29 [main] DEBUG BoxingValues - use box proto listenerorg.kink_lang.kink.internal.eval.VarAssignEvaluator$VarAssignListener@3af49f1c2015-10-04 15:58:29 [main] DEBUG BoxingValues - use box proto listenerorg.kink_lang.kink.internal.eval.ArgsPassingEvaluator$ListAssignListener@1c20c6842015-10-04 15:58:29 [main] DEBUG BoxingValues - use box proto listenerorg.kink_lang.kink.internal.eval.ThenUtils$BoolThenListener@1218025c2015-10-04 15:58:29 [main] DEBUG BoxingValues - Setup prototype for java.lang.String2015-10-04 15:58:29 [main] DEBUG Modules - Load module _enhance/java/lang/Objectfrom org.kink_lang.kink.internal.box.ObjectEnhancer@5e8c92f42015-10-04 15:58:29 [main] INFO Definer -org.kink_lang.kink.internal.define.frequency_threshold=128...システムの状態を後から見られるように出力したテキスト3/67
4.
なんで「ログ」って言うの?#jjug4/67
5.
なんで「ログ」って言うの? #jjuglog =
丸太5/67
6.
なんで「ログ」って言うの? #jjuglog =
船の速度標丸太 (log) を引っ張る綱の張りで船の速度を測った6/67
7.
なんで「ログ」って言うの? #jjuglogbook =
航海日誌Photo by vxla, Licensed as CC BY 2.0, https://www.flickr.com/photos/vxla/5779530912/logで測った速度や方向などを帳面 (logbook) につける7/67
8.
ログファイル= システムの航海日誌!#jjug8/67
9.
セッション内容 #jjugなぜログ?ログの道具Javaのログ9/67
10.
そもそも何のためにログを出すの?#jjug10/67
11.
ログの主な目的 #jjug不具合解析のため来るべき故障の際に、原因となった不具合が突き止められるようにするため、システム稼働時の内部状態を記録する※本セッションで主に扱う監査のため認証・入出金・個人情報の利用など、残しておく必要のあるイベントの発生を記録する11/67
12.
テストが完璧なら/デバッガがあればログがなくても不具合解析できる?#jjug12/67
13.
#jjugvs テストテストとログは相補的な関係テストの領分 個別具体的な要件について不具合がないことを、ある程度保証する
個別を積み重ねて全体に近づくログの領分 しかし完璧なテストはなく、たぶん故障は起きる。起きた故障を解析するためにはログが必要 ログは、開発・テスト時にシステムの動きを把握するのにも有用13/67
14.
#jjugvs デバッガデバッガとログも相補的な関係デバッガの領分 動作中のシステムの状態が閲覧・変更できるログの領分
過去のシステムの状態が閲覧できる 本番システムで利用できる 再現させるための条件が厳しかったり、不明だったりする故障について、故障発生前後の状況が追跡できる14/67
15.
ログの目的まとめ#jjug15/67
16.
#jjugログの目的 まとめログの目的は不具合解析/監査システムの過去の状態が分かるのが素敵不具合解析の手段として、テストやデバッガとは相補的な関係16/67
17.
セッション内容 #jjugなぜログ?ログの道具Javaのログ17/67
18.
#jjug問題設定ログを出すためにはどんな道具を使えばよいのでしょうか?18/67
19.
#jjug標準エラーにログを出す?Unix由来の慣習では、ログは一般に標準エラー出力に書き出されます例:System.err.println("ひらく夢などあるじゃなし");しかし本格的なプログラムでは、標準エラーへの直接出力は力不足です19/67
20.
ログの道具に必要な特性#jjug20/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モジュールJavaLog4j,
java.util.logging,Commons Logging, SLF4J,Logback, JBoss Logging, Log4j2,....24/67
25.
セッション内容 #jjugなぜログ?ログの道具Javaのログ25/67
26.
#jjug問題次の中で役割が異るライブラリはどれでしょう?A) java.util.loggingB) Log4jC)
LogbackD) SLF4J26/67
27.
ログファサードライブラリログ出力ライブラリ#jjug解答SLF4Jは他のライブラリにログ出力を委譲するログファサードライブラリですA) java.util.loggingB) Log4jC)
LogbackD) SLF4J27/67
28.
ログ関連ライブラリの分類 #jjugログファサードライブラリログ出力ライブラリLog4jjava.util.loggingLogbackLog4j2Commons LoggingSLF4JJBoss
Logging28/67
29.
ログ出力の階層 #jjugアプリケーションログファサードライブラリログ出力ライブラリファイル/コンソール/...ど う
考 え て も本 質 的 に は 要 ら な い も のなぜこんなことになったのかそれを知るには歴史を紐解く必要があります29/67
30.
Javaのログライブラリの歴史#jjug30/67
31.
Javaのログライブラリの歴史 #jjug~1999 前史時代31/67
32.
前史時代 #jjugApache Tomcat
3.0(最初期リリース)// org.apache.tomcat.core.ServletContextFacadepublic void log(String msg) {System.err.println(msg);}32/67
33.
Javaのログライブラリの歴史 #jjug~19991999前史時代Log4jの登場33/67
34.
Log4jの登場 #jjugimport 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ア ペ ン ダ =ConsoleAppenderorg.kink_lang.kinkレ ベ ル = DEBUGア ペ ン ダ =ConsoleAppender( 継 承 )org.kink_lang.kink.Valueレ ベ ル = DEBUG( 継 承 )ア ペ ン ダ =ConsoleAppender( 継 承 )+ RollingFileAppenderWARN, 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~199919992000前史時代Log4jの登場java.util.logging規格化開始40/67
41.
#jjugjava.util.loggingLog4jを参考にJSR47として規格化→ 2002年のJ2SE 1.4に採用41/67
42.
java.util.logging #jjugLog4jとだいたいおなじ!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.loggingLog4jの牙城を崩すには至らず ログレベルが謎 SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST
デフォルトの書式が扱いづらい ハンドラ(=アペンダ)の実装が不足 Java 1.3以前で使えない JVM全体で1つの設定しか持てない サーブレットコンテナ下で、各アプリケーションが個別のログ設定を持つための組み込みの方法がない43/67
44.
Javaのログライブラリの歴史 #jjug~1999199920002001前史時代Log4jの登場java.util.logging規格化開始Commons Loggingの登場44/67
45.
#jjugCommons Loggingの登場Commons HttpClientから派生したログファサードライブラリ
HttpClientのような便利ライブラリが、特定のログ実装に依存するのはちょっと、という理由ではじまったLog4jやjava.util.loggingを切り替えて使えるようになる(はずだった)45/67
46.
Commons Logging #jjugimport
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ア プ リ BCommons 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~19991999200020012005前史時代Log4jの登場java.util.logging規格化開始Commons Loggingの登場SLF4J
/ Logback50/67
51.
#jjugSLF4J / LogbackLog4jの開発者Ceki
Gülcüが、開発の遅延に愛想を尽かして立ち上げたプロジェクトSLF4JLogbackログファサードライブラリログ出力ライブラリSLF4Jと組み合わせて使う前提2015年現在のデファクトスタンダード51/67
52.
SLF4J / Logback
#jjugimport 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必要なJARslf4j-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アプリStaticLoggerBindergetLogger()getSingleton()バ イ ン
デ ィ ン グ の J A R 内 に同 名 の ク ラ ス が そ れ ぞ れ 存 在slf4j-api-*.jarに存在55/67
56.
#jjugSLF4J多くのライブラリはSLF4JではなくLog4jやCommons Loggingなどを叩いていますログ設定を統合するためには、これらをSLF4Jに横取りする必要があります56/67
57.
#jjugSLF4Jログの横取りLog4jjava.util.loggingCommonsLogginglog4j-over-slf4j-*.jarLog4j と同名のクラスを提供実際には SLF4Jに流し込むjcl-over-slf4j-*.jarCommons
Loggingと同名のクラスを提供実際には SLF4Jに流し込むjul-to-slf4j-*.jarSLF4Jに流し込むハンドラを提供slf4j-api-*.jarと同じ場所に配置します57/67
58.
#jjugLogback独自のロガーインタフェースを持たず、SLF4J経由で呼び出します提供する機能 マーカー ログ行のラベル的なもの
マーカー「 auth」がついてるログは auth.logに出す、みたいなことができます 設定のリロード アプリごとにログ出力先を分ける機能58/67
59.
Javaのログライブラリの歴史 #jjug~19991999200020012005前史時代Log4jの登場java.util.logging規格化開始Commons Loggingの登場SLF4J
/ Logback2014 Log4j259/67
60.
#jjugLog4j2Log4j 1.2系と互換性のない新しい実装機能・構成はLogbackに似ています60/67
61.
Log4j2 #jjugimport 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.
結局なにを使えばいいの?#jjug62/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のログまとめ#jjug65/67
66.
#jjugJavaのログ まとめ Log4jがJavaのログの道具立てを作った
ロガー/アペンダ/MDC... ライブラリの依存性の都合からログファサードが生まれた SLF4Jを使っておけばとりあえずOK66/67
67.
セッション内容 #jjugなぜログ?ログの道具Javaのログ67/67
Download
[8]
ページ先頭
©2009-2025
Movatter.jp