0

我正在尝试以编程方式添加 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 配置文件中,它可以正常工作。

任何想法?

4

1 回答 1

0

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

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

patternProvider.setContext(ContextSelectorStaticBinder.getSingleton().getContextSelector().getDefaultLoggerContext());
于 2020-02-06T15:56:04.130 回答