从日志文件中解析Log4j布局

PNS*_*PNS 5 java logging log4j apache-chainsaw

是否有任何开源工具可以将Apache Log4j 1.2.x的所有布局实现读入有意义的东西(例如,Log4j自己的LogEvent对象)?到目前为止,我还没有找到可以做到这一点的应用程序(包括Chainsaw).

我正在寻找直接的东西,从文本文件(普通或XML)转换为Java对象,给定文件名和模式参数(例如,PatternLayout中的格式模式).如果它有一个清晰的API,可以很容易地集成到应用程序中,甚至更好,但这不是必需的.

Krz*_*zyH 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);
Run Code Online (Sandbox Code Playgroud)


Sco*_*ott 9

以下是Chainsaw用于将patternlayouts转换为有用的代码的代码,仅使用log4j API.对于Chainsaw的最新开发人员快照,它用于直接从log4j xml或属性文件fileappender条目构建Chainsaw配置.

使用PatternParser#parse填充的转换器和字段来执行您想要的操作.PatternParser类包含在log4j'adts'伴侣中.

来自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);
}
Run Code Online (Sandbox Code Playgroud)

如果您确实想要读取符合特定PatternLayout的日志文件并生成log4j LoggingEvents的内容,请参阅LogFilePatternReceiver.Chainsaw使用getLogFormatFromPatternLayout方法将patternLayout转换为接收器所需的LogFormat.

顺便说一句,Chainsaw的开发人员快照包含许多其他新功能 - 如果你想尝试一下,你可以在这里得到它:

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