Interceptorの考え方

 以前、私はこのブログでロギングはInterceptorでと言いました。これは、以前私が読んだAspect指向の記事の影響があってのことですが、私はひとつ多大な勘違いをしていたことに気がつきました。それはロギングの仕組みはCrosscutting Concern(横断的関心事)なのですが、ログをとることはCore Concern(核心的関心事)だということです。
 つまり、Interceptorでのロギングは仕組みの提供にとどまるべきだということです。具体的な例を挙げますと、想定できない、しかし絶対に起こらないと断言できない例外を発生させるメソッドがあったとします。というか、OutOfMemory等の例外はどのメソッドでも起こりえますし、潜在バグでいつNullPointerExceptionが起こるかわかりません。これらのためにあちこちにtry〜catchを埋め込むのはナンセンスです。そこでInterceptorを使います。このInterceptorは、例外を補足してロギングする仕組みを提供するのです。結局はこれもログを取っているのでCore Concernと言えばそうなのですが、アプリケーションレベルで見たCore Concernというほどのものでもないのではないでしょうか。逆にCore Concern的なログをとることと言えば、「ログインした」「マスタテーブルに登録された」などのログです。こんなロギングは使いまわしは不可能です。こういうのはやはりInterceptorに入れるべきではないのではないかと思い始めています。