[英]PatternLayout not substituting values from ThreadContext in Java
我打算使用%X
(和%d)占位符在Java代碼中創建一個PatternLayout對象,該對象將從ThreadContext中替換其值。
private PatternLayout patternLayout = PatternLayout.newBuilder()
.withPattern("op1=%X{op1}|op2=%X{op2}|timestamp=%d{HH:mm:ss.SSS}")
.build();
我還實現了Log4J Message
接口:
private final PatternLayout pattern;
MyLoggingMessage(final PatternLayout pattern) {
this.pattern = pattern;
}
@Override
public String getFormattedMessage() {
// I have also tried return pattern.getContentFormat();
return pattern.toString();
}
但是,當將其記錄在Graylog中時,這些值尚未被替換掉,並保持為op1=%X{op1}|op2=%X{op2}|timestamp=%d{HH:mm:ss.SSS}
。 但是,如果我在追加程序中使用相同模式的XML實現,...
<PatternLayout pattern="op1=%X{op1}|op2=%X{op2}|timestamp=%d{HH:mm:ss.SSS}" />
這一切都被取代了。 如何獲取log4j來評估Java模式? 從我所看到的,這兩種方法都只是設置pattern
字段。
所以這對我有用:
private final StringMap params;
MyLoggingMessage(final PatternLayout pattern) {
this.pattern = pattern;
this.params = (StringMap) ThreadContext.getContext();
}
@Override
public String getFormattedMessage() {
LogEvent logEvent = Log4jLogEvent.newBuilder()
.setContextData(params)
.build();
return pattern.toSerializable(logEvent);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.