Log4j 链锯日志格式模式语法

Log4j 链锯日志格式模式语法,log4j,apache-chainsaw,Log4j,Apache Chainsaw,我们有一个具有以下模式的log4j文件: @|%d{yyyy-MM-dd HH:mm:ss.SSS}|%X{Machine}|%X{CorrelationId}|%X{Sender}|%X{Receiver}|%-5p|%X{Runtime}|%X{ClientUser}|%c|%M|%L|%m%n @|TIMESTAMP|PROP(MACHINE)|PROP(CORRELATIONID)|PROP(SENDER)|PROP(RECEIVER)|LEVEL|PROP(RUNTIME)|PROP

我们有一个具有以下模式的log4j文件:

@|%d{yyyy-MM-dd HH:mm:ss.SSS}|%X{Machine}|%X{CorrelationId}|%X{Sender}|%X{Receiver}|%-5p|%X{Runtime}|%X{ClientUser}|%c|%M|%L|%m%n
@|TIMESTAMP|PROP(MACHINE)|PROP(CORRELATIONID)|PROP(SENDER)|PROP(RECEIVER)|LEVEL|PROP(RUNTIME)|PROP(CLIENTUSER)|CLASS|METHOD|LINE|MESSAGE
我使用以下模式创建了LogFilePatternReceiver:

@|%d{yyyy-MM-dd HH:mm:ss.SSS}|%X{Machine}|%X{CorrelationId}|%X{Sender}|%X{Receiver}|%-5p|%X{Runtime}|%X{ClientUser}|%c|%M|%L|%m%n
@|TIMESTAMP|PROP(MACHINE)|PROP(CORRELATIONID)|PROP(SENDER)|PROP(RECEIVER)|LEVEL|PROP(RUNTIME)|PROP(CLIENTUSER)|CLASS|METHOD|LINE|MESSAGE
但当我启动接收器时,我得到一个错误:

java.lang.IllegalArgumentException: invalid expression: 
    at org.apache.log4j.rule.ExpressionRule$PostFixExpressionCompiler.compileExpression(ExpressionRule.java:132)
    at org.apache.log4j.rule.ExpressionRule.getRule(ExpressionRule.java:64)
    at org.apache.log4j.rule.ExpressionRule.getRule(ExpressionRule.java:56)
    at org.apache.log4j.varia.LogFilePatternReceiver.initialize(LogFilePatternReceiver.java:557)
    at org.apache.log4j.varia.LogFilePatternReceiver$1.run(LogFilePatternReceiver.java:801)
    at java.lang.Thread.run(Unknown Source)

regexp is @|(\w+-\w+-\w+ \w+:\w+:\w+.\w+)|(.+?)|(.+?)|(.+?)|(.+?)|(.+?)|(.+?)|(.+?)|(.+?)|(.+?)|(.+?)|(.+)

我真的不知道错误在哪里?有什么意见吗?我可以对非标准列使用“PROP(…)”这样的关键字吗?

是的,您可以对自己的列使用PROP关键字

你能试试链锯的最新开发者快照吗?它可以解析包含FileAppender条目的log4j.xml或log4j.properties配置,并将构建一个匹配的链锯配置来处理该配置

此处提供快照。新版本还具有许多新功能:

通常让人感到困惑的是时间戳格式和特殊字符,但我在这里没有看到任何奇怪的东西,所以看看最新的开发人员快照是否有帮助


斯科特

我试过了,效果不错,谢谢。我想知道,为什么这样一个函数不是链锯的一部分,但现在它已经包含在内了;-)