5

Apache Log4j 1.2.xのすべてのレイアウト実装を意味のあるもの(たとえば、Log4j自体のLogEventオブジェクト)に読み取ることができるオープンソースツールはありますか?これまでのところ、それを実行できるアプリケーション(チェーンソーを含む)は見つかりませんでした。

ファイル名とパターンパラメータ(PatternLayoutのフォーマットパターンなど)を指定して、テキストファイル(プレーンまたはXML)からJavaオブジェクトに変換する簡単なものを探しています。アプリケーションへの統合を容易にする明確なAPIがあれば、さらに優れていますが、これは必須ではありません。

4

3 に答える 3

10

これは、Chainsawがlog4j APIのみを使用して、patternlayoutsを有用なものに変換するために使用するコードです。チェーンソーの最新の開発者スナップショットの場合、log4jxmlまたはプロパティファイルfileappenderエントリから直接チェーンソー構成を構築するために使用されます。

PatternParser#parseによって入力されたコンバーターとフィールドを使用して、必要な処理を実行します。PatternParserクラスは、log4j'extras'コンパニオンに含まれています。

http://svn.apache.org/repos/asf/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.javaから

public static String getLogFormatFromPatternLayout(String patternLayout) {
    String input = OptionConverter.convertSpecialChars(patternLayout);
    List converters = new ArrayList();
    List fields = new ArrayList();
    Map converterRegistry = null;

    PatternParser.parse(input, converters, fields, converterRegistry, PatternParser.getPatternLayoutRules());
    return getFormatFromConverters(converters);
}

特定のPatternLayoutに準拠するログファイルを読み取り、log4j LoggingEventsを生成するものが実際に必要な場合は、LogFilePatternReceiverを参照してください。チェーンソーはgetLogFormatFromPatternLayoutメソッドを使用して、patternLayoutをレシーバーが必要とするLogFormatに変換します。

ちなみに、Chainsawの開発者スナップショットには、多くの追加の新機能が含まれています。試してみたい場合は、ここから入手できます。

http://people.apache.org/~sdeboy

于 2011-07-08T17:12:01.537 に答える
9

私はオープンソースのログビューアOtrosLogViewerを開発しています。アプリケーションのライブラリとして使用できます。このを見てください。

//Define log4j properties
Properties p = new Properties();
p.put("type", "log4j");
p.put("pattern", "TIMESTAMP LEVEL [THREAD]  MESSAGE");
p.put("dateFormat", "yyyy-MM-dd HH:mm:ss,SSS");
Log4jPatternMultilineLogParser logParser = new Log4jPatternMultilineLogParser();    
LogImporterUsingParser importerUsingParser = new LogImporterUsingParser(logParser);
importerUsingParser.init(p);

//
ParsingContext context = new ParsingContext();

//Create log collector, it capture all parsed log events
ProxyLogDataCollector dataCollector = new ProxyLogDataCollector();

//Create input stream from file
InputStream in = new FileInputStream("log4j/log4j.txt");

//parse log file
importerUsingParser.importLogs(in, dataCollector, context);
于 2011-07-08T12:01:54.567 に答える
1

私はあなたのプロジェクトに出くわしました、そしてそれは素晴らしい仕事です、しかし理想的にはネイティブのLog4j変換パターン(例えば%-5p [%t]: %m%n)とそのパターンを使ってフォーマットされたファイルを取り、対応する情報を読む何かが欲しいです。

Layout.format(LoggingEvent)基本的に、 Log4jの基本レイアウトクラスのメソッドの逆を探しています。このメソッドは、ログファイルに格納される文字列を生成するため、逆の操作でそのファイルを解析し、LoggingEventオブジェクトなど(逆シリアル化手順など)を作成できます。

ありがとう!

編集:変換は簡単です。

LogFilePatternLayoutBuilder.getLogFormatFromPatternLayout(conversionPattern);

Chainsawクラスorg.apache.log4j.chainsaw.LogFilePatternLayoutBuilderを介して。

于 2011-07-08T13:11:00.177 に答える