我正在尝试以编程方式添加LogstashUdpSocketAppender,但无法使用工作模式创建布局

private Layout<ILoggingEvent> getLayout() {

    LoggingEventCompositeJsonLayout newLayout = new LoggingEventCompositeJsonLayout();

    LoggingEventPatternJsonProvider patternProvider = new LoggingEventPatternJsonProvider();
    patternProvider.setPattern("{ \"field1\":\"value\" , \"message\":\"%message\"}");

    JsonProviders<ILoggingEvent> providers = new JsonProviders<ILoggingEvent>();
    providers.addProvider(patternProvider);

    newLayout.setLineSeparator("SYSTEM");
    newLayout.setProviders(providers);

    return newLayout;

}


但这不起作用,它输出


{“ field1”:“ value”,“ message”:“%PARSER_ERROR [message]”}


如果将相同的模式放在XML配置文件中,则可以正常工作。

任何想法?

最佳答案

https://github.com/logstash/logstash-logback-encoder/issues/388

在LoggingEventPatternJsonProvider patternProvider patternProvider上设置上下文可以解决我的问题。

patternProvider.setContext(ContextSelectorStaticBinder.getSingleton().getContextSelector().getDefaultLoggerContext());

08-07 20:01