SlideShare a Scribd company logo
例外 の log を快適に
Play meetup 2, 2015-07-05
@kawachi
普段見ている景色
例外の log ながいなー
Play は logback を使っているので

logback の機能がそのまま使える
conf/logback.xml に設定すれば OK
デフォルトのフォーマット
<pattern>
%coloredLevel - %logger -
%message%n%xException
</pattern>
stack trace の深さを制限
<pattern>
%coloredLevel - %logger -
%message%n%xException{3}
</pattern>
深さ3まで
各々3つまでに
だいぶ見やすい
でも深さ3で大丈夫?
自アプリの行は全部出したいが
自アプリ内で関数呼び出しが

深くなることもあるだろうし…
一方 Rails は…

自分のアプリに

含まれる行だけを filter していた
https://github.com/rails/rails/blob/master/railties/lib/rails/
backtrace_cleaner.rb
信頼と実績の logback なら

できるよね?
4ヶ月前に入ってた!
指定したstack frame を

非表示に
<pattern>
%coloredLevel - %logger -
%message%n
%xException{full,play,akka,scala}
</pattern>
深さは全部(full)
“play” と “akka” と “scala” の行を除く
あ、あれ?
自分の書いた stack frame も出ない…
行を文字列マッチしてるだけなので
“scala” を指定すると↓も非表示に…
at controllers.Application.foo(Application.scala:8)
作るしか無いか…
作った
依存性追加して (build.sbt)
libraryDependencies +=
"com.github.tkawachi" %
"appexception-logback" %
"0.0.2"
conversionRule を追加 (logback.xml)
<conversionRule
conversionWord=“appEx”
converterClass=
“com.github.tkawachi.appexception.AppThr
owableProxyConverter" />
appEx という名前で使えるようにする
指定したstack frame だけ表示
<pattern>
%coloredLevel - %logger -
%message%n
%appEx{controllers,foo.bar}
</pattern>
完全修飾クラス名が
“controllers”, “foo.bar” から始まる

frame だけを表示。
思い通りの仕上がりに
<property name="appClassPrefixes" value="

controllers,

views

“/>
<pattern>
%coloredLevel - %logger -
%message%n
%appEx{${appClassPrefixes}}
</pattern>
prefix 指定が長くなる時は別定義して呼び出せます
まとめ
• logback.xml をいい感じに書くと

ログが見やすくなる
• 指定クラスの stack frame だけ出す

appexception-logback 作った

https://github.com/tkawachi/appexception-logback
• Feedback お待ちしています

More Related Content

Similar to 例外のlogを快適に

関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013Esehara Shigeo
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To Clojure
Kent Ohashi
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
 
X86opti01 nothingcosmos
X86opti01 nothingcosmosX86opti01 nothingcosmos
X86opti01 nothingcosmos
nothingcosmos
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
 
[輪講] 第1章
[輪講] 第1章[輪講] 第1章
[輪講] 第1章
Takenobu Sasatani
 
Rails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) APIRails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) API
Yohei Yasukawa
 
言語処理系入門1
言語処理系入門1言語処理系入門1
言語処理系入門1
Kenta Hattori
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
dynamis
 
appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1
Go Sueyoshi (a.k.a sue445)
 
Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話
Rie Nakau
 
Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Sea Mountain
 
Exgettextの話
Exgettextの話Exgettextの話
Exgettextの話k1complete
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Kei IWASAKI
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
Takuya Sato
 

Similar to 例外のlogを快適に (20)

関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To Clojure
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
Tokyo r33 beginner
Tokyo r33 beginnerTokyo r33 beginner
Tokyo r33 beginner
 
X86opti01 nothingcosmos
X86opti01 nothingcosmosX86opti01 nothingcosmos
X86opti01 nothingcosmos
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
[輪講] 第1章
[輪講] 第1章[輪講] 第1章
[輪講] 第1章
 
Rails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) APIRails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) API
 
言語処理系入門1
言語処理系入門1言語処理系入門1
言語処理系入門1
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
 
appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1appengine活用事例資料@TDDBC札幌2.1
appengine活用事例資料@TDDBC札幌2.1
 
Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話
 
Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3
 
Exgettextの話
Exgettextの話Exgettextの話
Exgettextの話
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 

More from Takashi Kawachi

MacroPyがすごい
MacroPyがすごいMacroPyがすごい
MacroPyがすごい
Takashi Kawachi
 
Silhouette intro
Silhouette introSilhouette intro
Silhouette intro
Takashi Kawachi
 
最小 Hello World! チャレンジ
最小 Hello World! チャレンジ最小 Hello World! チャレンジ
最小 Hello World! チャレンジ
Takashi Kawachi
 
Elastic beanstalk と Docker と Play
Elastic beanstalk と Docker と PlayElastic beanstalk と Docker と Play
Elastic beanstalk と Docker と PlayTakashi Kawachi
 
やさしいIteratee入門
やさしいIteratee入門やさしいIteratee入門
やさしいIteratee入門
Takashi Kawachi
 
Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20Takashi Kawachi
 
Haskell超初心者勉強会17
Haskell超初心者勉強会17Haskell超初心者勉強会17
Haskell超初心者勉強会17Takashi Kawachi
 
Haskell超初心者勉強会14
Haskell超初心者勉強会14Haskell超初心者勉強会14
Haskell超初心者勉強会14Takashi Kawachi
 
Haskell超初心者勉強会11
Haskell超初心者勉強会11Haskell超初心者勉強会11
Haskell超初心者勉強会11Takashi Kawachi
 
Scalaでの例外処理
Scalaでの例外処理Scalaでの例外処理
Scalaでの例外処理
Takashi Kawachi
 

More from Takashi Kawachi (12)

MacroPyがすごい
MacroPyがすごいMacroPyがすごい
MacroPyがすごい
 
Silhouette intro
Silhouette introSilhouette intro
Silhouette intro
 
最小 Hello World! チャレンジ
最小 Hello World! チャレンジ最小 Hello World! チャレンジ
最小 Hello World! チャレンジ
 
Sbt doctest
Sbt doctestSbt doctest
Sbt doctest
 
Elastic beanstalk と Docker と Play
Elastic beanstalk と Docker と PlayElastic beanstalk と Docker と Play
Elastic beanstalk と Docker と Play
 
やさしいIteratee入門
やさしいIteratee入門やさしいIteratee入門
やさしいIteratee入門
 
Sbt lock1
Sbt lock1Sbt lock1
Sbt lock1
 
Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20
 
Haskell超初心者勉強会17
Haskell超初心者勉強会17Haskell超初心者勉強会17
Haskell超初心者勉強会17
 
Haskell超初心者勉強会14
Haskell超初心者勉強会14Haskell超初心者勉強会14
Haskell超初心者勉強会14
 
Haskell超初心者勉強会11
Haskell超初心者勉強会11Haskell超初心者勉強会11
Haskell超初心者勉強会11
 
Scalaでの例外処理
Scalaでの例外処理Scalaでの例外処理
Scalaでの例外処理
 

例外のlogを快適に