如何配置LoggingEventCompositeJsonEncoder的自定义PatternLayout



我已经创建了一个自定义PatternLayout,我正在logback的Access和File appenders中使用它,我也想将它用于LoggingEventCompositeJsonEncoder。

有可能用我的布局配置编码器吗?我如何实现这一点?

文件附加程序配置示例:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.me.util.logging.PatternLayoutFiltered">
<pattern>${LOG_PATTERN}</pattern>
</layout>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rotate every day -->
<fileNamePattern>${logback.rollingPolicy.file.fileNamePattern}</fileNamePattern>
<!-- Days of history -->
<maxHistory>${logback.maxHistory.retention:-7}</maxHistory>
</rollingPolicy>
</appender>

我的logstash编码器:

<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>%d{ISO8601}</timestamp>
<message/>
<loggerName/>
<context/>
<mdc/>
<pattern>
<pattern>
{
"appVersion": "${build.version}",
"appName": "${build.artifact}",
"resourceType": "${logback.application.resource.type}",
"resourceID": "${logback.application.resource.id}",
"level": "%level",
"hostname": "${logback.server.host}",
"indexType": "${logback.logstash.index.type}"
}
</pattern>
</layout>
</pattern>
<stackTrace/>
</providers>
</encoder>

我在哪里可以定义相同的PatternLayout?我在这里读到

模板中的每个值都被视为logback的模式标准PatternLayout,因此它可以是文字字符串的组合(对于某些常量(和各种转换说明符(例如%d日期(。

那么我如何配置自己的?谢谢你的帮助。

为了解决这个问题,我必须使用自定义的valueMasker来进行过滤,并应用与布局相同的过滤方法来过滤字段值。

添加到logback.xml:

<jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
<valueMasker class="com.me.util.logging.CustomValueMasker"/></jsonGeneratorDecorator>

Java类类似于:

package com.me.util.logging;
import com.fasterxml.jackson.core.JsonStreamContext;
import net.logstash.logback.mask.ValueMasker;
public class CustomValueMasker implements ValueMasker {
@Override
public Object mask(JsonStreamContext jsonStreamContext, Object o) {
if (o instanceof CharSequence) {
return doTransform((String) o);
}
return o;
}
/**
* Do the message filtering
*
* @param msg the message of the event log
*
* @return the filtered message
*/
private String doTransform(String msg) {
// Do whatever filtering needed here
return msg;
}
}

相关内容

  • 没有找到相关文章

最新更新