微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Spring应用程序的Logback中以编程方式传递Patten和JsonFactoryDe​​corator

如何解决如何在Spring应用程序的Logback中以编程方式传递Patten和JsonFactoryDe​​corator

这是我的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值和CharacterEscapesJsonFactoryDe​​corator。请您帮我一下。

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 举报,一经查实,本站将立刻删除。