logback高度な特性使用(二)
2776 ワード
カスタムPatternテンプレート
カスタムフォーマット変換子を作成するには、次の2つのステップがあります.
1.変換器クラスを書き、ClassicConvertを継承する
サンプルコード:
2.logback.xmlに変換器を登録し、変換子をカスタマイズする
登録:
カスタムip変換子:>%d{yyyy-MM-dd HH:mm:ss.SSS}%ip[%thread] %-5level %logger{36} -% msg%nPattern>
この2つのステップを経て、カスタムip変換子を出力テンプレートに追加できます.
テスト結果:
2013-04-01 15:25:16.887
10.10.10.10 [main] ERROR c.s.f.log.normal.TestAppender
ここの10.10.10.10は変換後の値です.
上記の手順は基本的なカスタムテンプレートの方法にすぎませんが、悪いところはプロファイルに登録することですが、実際にはlogbackのオリジナル作成の方法を真似てこの変換子を加えればいいのです.PatternLayout.javaのソースコードが表示されます.
このstaticメソッドに一言追加するだけです.
defaultConverterMap.put("ip",IpConvert.class.getName());できます.「ip」は変換された文字であり、IpConvertは上記で定義した変換器クラスである.しかし、どのように追加しますか?
次のような実装方法があります.
まず、PatternLayout.javaを継承するクラスを定義します.
親クラスのプロパティを直接呼び出し、カスタム変換子を追加します.IpConvertは、前述したコンバータです.
その後、logback.xmlでカスタムPatternLayoutを構成します.
元のlayoutのclassクラスは「
ch.qos.logback.classic.PatternLayout」は、こちらをカスタマイズすればいいです.
上記の2つのスキームにより、カスタムテンプレートの機能を実現できます.この機能はクラスタの環境下でログの分析を行うシーンで、通常異常ログを分析する際、どのホスト上のどのserverが間違っているのかを正確に特定することはできません.ipアドレス情報をログに追加すると、ログの分析作業がより正確で効率的になります.モニタリングプラットフォームのようなシステムがあれば、すべての異常ログを統一的に分析することができ、ホストipやシステムアプリケーションidのような違いの変数を出力で定義するだけで、処理のメリットは言うまでもありません.
カスタムフォーマット変換子を作成するには、次の2つのステップがあります.
1.変換器クラスを書き、ClassicConvertを継承する
サンプルコード:
package com.cj.log;
import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
public class IpConvert extends ClassicConverter {
@Override
public String convert(ILoggingEvent event) {
return "10.10.10.10";
}
}
2.logback.xmlに変換器を登録し、変換子をカスタマイズする
登録:
カスタムip変換子:>%d{yyyy-MM-dd HH:mm:ss.SSS}%ip[%thread] %-5level %logger{36} -% msg%nPattern>
この2つのステップを経て、カスタムip変換子を出力テンプレートに追加できます.
テスト結果:
2013-04-01 15:25:16.887
10.10.10.10 [main] ERROR c.s.f.log.normal.TestAppender
ここの10.10.10.10は変換後の値です.
上記の手順は基本的なカスタムテンプレートの方法にすぎませんが、悪いところはプロファイルに登録することですが、実際にはlogbackのオリジナル作成の方法を真似てこの変換子を加えればいいのです.PatternLayout.javaのソースコードが表示されます.
public class PatternLayout extends PatternLayoutBase {
public static final Map defaultConverterMap = new HashMap();
static {
defaultConverterMap.putAll(Parser.DEFAULT_COMPOSITE_CONVERTER_MAP);
defaultConverterMap.put("d",DateConverter.class.getName());
defaultConverterMap.put("date",DateConverter.class.getName());
defaultConverterMap.put("r",RelativeTimeConverter.class.getName());
defaultConverterMap.put("relative",RelativeTimeConverter.class.getName());
...
このstaticメソッドに一言追加するだけです.
defaultConverterMap.put("ip",IpConvert.class.getName());できます.「ip」は変換された文字であり、IpConvertは上記で定義した変換器クラスである.しかし、どのように追加しますか?
次のような実装方法があります.
まず、PatternLayout.javaを継承するクラスを定義します.
package com.cj.log;
import ch.qos.logback.classic.PatternLayout;
public class MyPatternLayout extends PatternLayout {
static {
defaultConverterMap.put("ip",IpConvert.class.getName());
}
}
親クラスのプロパティを直接呼び出し、カスタム変換子を追加します.IpConvertは、前述したコンバータです.
その後、logback.xmlでカスタムPatternLayoutを構成します.
%d{yyyy-MM-dd HH:mm:ss.SSS} %ip [%thread] %-5level %logger{36} -%msg%n
元のlayoutのclassクラスは「
ch.qos.logback.classic.PatternLayout」は、こちらをカスタマイズすればいいです.
上記の2つのスキームにより、カスタムテンプレートの機能を実現できます.この機能はクラスタの環境下でログの分析を行うシーンで、通常異常ログを分析する際、どのホスト上のどのserverが間違っているのかを正確に特定することはできません.ipアドレス情報をログに追加すると、ログの分析作業がより正確で効率的になります.モニタリングプラットフォームのようなシステムがあれば、すべての異常ログを統一的に分析することができ、ホストipやシステムアプリケーションidのような違いの変数を出力で定義するだけで、処理のメリットは言うまでもありません.