如何解决如何在Spring应用程序的Logback中以编程方式传递Patten和JsonFactoryDecorator
这是我的logback.spring.xml
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<arguments/>
<stackTrace/>
<mdc>
<excludeMdcKeyName>ClaimNo</excludeMdcKeyName>
<excludeMdcKeyName>ClaimId</excludeMdcKeyName>
</mdc>
<pattern>
<pattern>
{
"Claim": "[${logback.company},${logback.info}]",// YML file value
"Log level": "${logback.level}",// YML value
"Time": "%date","Thread ID": "%thread","claimId":"[%X{claimId}]",//MDC key
"Claim no": "[%X{CliamNo}]",// MDC Key
"Logger": "%logger","Message": "%msg"
}
</pattern>
</pattern>
</providers>
<jsonFactoryDecorator class="net.logstash.logback.decorate.CharacterEscapesJsonFactoryDecorator">
<escape>
<targetCharacterCode>9</targetCharacterCode> <!-- Tab-->
<escapeSequence></escapeSequence>
</escape>
<escape>
<targetCharacterCode>10</targetCharacterCode> <!-- New Line-->
<escapeSequence></escapeSequence>
</escape>
</jsonFactoryDecorator>
</encoder>
由于我使用具有相同编码模式的不同追加程序,并且为了重用该模式,因此我尝试以编程方式添加如下所示的内容,但是在这里我不确定如何从类级别传递模式,MDC值和CharacterEscapesJsonFactoryDecorator。请您帮我一下。
public class JsonEncoder extends LoggingEventCompositeJsonEncoder {
public JsonEncoder() {
}
@Override
public void start() {
List<String> mdcList = new ArrayList<String>();
mdcList.add("ClaimNo");
mdcList.add("CliamId");
MdcJsonProvider mdcJsonProvider= new MdcJsonProvider();
mdcJsonProvider.setExcludeMdcKeyNames(mdcList);
JsonProviders<ILoggingEvent> providers = getProviders();
providers.addProvider(mdcJsonProvider);
super.start();
}
}
Logback.spring.xml
<encoder class="com.solution.JsonEncoder"></encoder>
解决方法
xml元素名称与基础配置类上的setter / adder方法匹配。
还请注意,模式值不应包含注释。
public class JsonEncoder extends LoggingEventCompositeJsonEncoder {
@Override
public void start() {
/*
* <providers>
*/
JsonProviders<ILoggingEvent> providers = getProviders();
providers.setContext(getContext());
/*
* <arguments/>
*/
providers.addProvider(new ArgumentsJsonProvider());
/*
* <stackTrace/>
*/
providers.addProvider(new StackTraceJsonProvider());
/*
* <mdc>
* <excludeMdcKeyName>ClaimNo</excludeMdcKeyName>
* <excludeMdcKeyName>ClaimId</excludeMdcKeyName>
* </mdc>
*/
MdcJsonProvider mdcJsonProvider= new MdcJsonProvider();
List<String> mdcList = new ArrayList<String>();
mdcList.add("ClaimNo");
mdcList.add("ClaimId");
mdcJsonProvider.setExcludeMdcKeyNames(mdcList);
providers.addProvider(mdcJsonProvider);
/*
* <pattern>
* <pattern>...</pattern>
* </pattern>
*/
LoggingEventPatternJsonProvider patternJsonProvider = new LoggingEventPatternJsonProvider();
patternJsonProvider.setPattern("{\n" +
"\"Claim\": \"[${logback.company},${logback.info}]\",\n" +
"\"Log level\": \"${logback.level}\",\n" +
"\"Time\": \"%date\",\n" +
"\"Thread ID\": \"%thread\",\n" +
"\"claimId\":\"[%X{claimId}]\",\n" +
"\"Claim no\": \"[%X{CliamNo}]\",\n" +
"\"Logger\": \"%logger\",\n" +
"\"Message\": \"%msg\"\n" +
"}");
providers.addProvider(patternJsonProvider);
/*
* </providers>
*/
/*
* <jsonFactoryDecorator class="net.logstash.logback.decorate.CharacterEscapesJsonFactoryDecorator">
* <escape>
* <targetCharacterCode>9</targetCharacterCode> <!-- Tab-->
* <escapeSequence></escapeSequence>
* </escape>
* <escape>
* <targetCharacterCode>10</targetCharacterCode> <!-- New Line-->
* <escapeSequence></escapeSequence>
* </escape>
* </jsonFactoryDecorator>
*/
CharacterEscapesJsonFactoryDecorator jsonFactoryDecorator = new CharacterEscapesJsonFactoryDecorator();
CharacterEscapesJsonFactoryDecorator.Escape escape1 = new CharacterEscapesJsonFactoryDecorator.Escape();
escape1.setTargetCharacterCode(9);
escape1.setEscapeSequence("");
jsonFactoryDecorator.addEscape(escape1);
CharacterEscapesJsonFactoryDecorator.Escape escape2 = new CharacterEscapesJsonFactoryDecorator.Escape();
escape2.setTargetCharacterCode(10);
escape2.setEscapeSequence("");
jsonFactoryDecorator.addEscape(escape2);
setJsonFactoryDecorator(jsonFactoryDecorator);
super.start();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。