Конфигурация Logback на основе Java - PullRequest
0 голосов
/ 31 января 2019

Я застрял с настройкой обратного входа на основе Java через бины.Как видно, конфигурация даже не загружается.Было бы здорово, если бы кто-нибудь помог мне решить эту проблему.Присоединение приведенного ниже кода.

открытый класс JsonLogAppender {

@Bean("loggerContext")
public LoggerContext loggerContext() {
    return (LoggerContext) LoggerFactory.getILoggerFactory();
}

@Bean
@DependsOn("loggerContext")
public static Logger rootLogger(LoggerContext loggerContext) {
    Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
    rootLogger.setLevel(Level.INFO);
    rootLogger.addAppender(consoleAppender(loggerContext, rootLogger));
    rootLogger.addAppender(tcpSocketAppender(loggerContext, rootLogger));
    return rootLogger;
}

@Bean
protected static ConsoleAppender<ILoggingEvent> consoleAppender(LoggerContext loggerContext, Logger rootLogger) {
    ConsoleAppender<ILoggingEvent> consoleAppender = new ConsoleAppender<>();
    consoleAppender.setContext(loggerContext);
    consoleAppender.setName(CONSOLE_APPENDER_NAME);
    consoleAppender.setEncoder(patternLayoutEncoder(loggerContext));
    consoleAppender.start();
    return consoleAppender;
}

@DependsOn("rootLogger")
public static PatternLayoutEncoder patternLayoutEncoder(LoggerContext loggerContext) {
    PatternLayoutEncoder encoder = new PatternLayoutEncoder();
    encoder.setContext(loggerContext);
    encoder.setPattern(PATTERN);
    encoder.setCharset(Charset.forName(CHARSET));
    encoder.start();
    return encoder;
}

@Bean
@Primary
protected static LogstashTcpSocketAppender tcpSocketAppender(LoggerContext loggerContext, Logger rootLogger) {
    LogstashTcpSocketAppender appender = new LogstashTcpSocketAppender();
    appender.setName(TCP_APPENDER_NAME);
    appender.setContext(loggerContext);
    appender.addDestination(TCP_DESTINATION);
    appender.setEncoder(compositeJsonEncoder(loggerContext, rootLogger));
    return appender;
}

@Bean
protected static LoggingEventCompositeJsonEncoder compositeJsonEncoder(LoggerContext loggerContext, Logger rootLogger){
    LoggingEventCompositeJsonEncoder encoder = new LoggingEventCompositeJsonEncoder();
    encoder.setContext(loggerContext);
    encoder.getProviders().addProvider(new MessageJsonProvider());
    encoder.getProviders().addProvider(new StackTraceJsonProvider());
    encoder.getProviders().addProvider(new LogstashMarkersJsonProvider());
    encoder.getProviders().addProvider(new ThreadNameJsonProvider());
    encoder.getProviders().addProvider(new LoggerNameJsonProvider());
    encoder.getProviders().addProvider(new LogLevelJsonProvider());
    encoder.getProviders().addProvider(new ContextJsonProvider<>());
    encoder.getProviders().addProvider(new MdcJsonProvider());
    encoder.getProviders().addProvider(withPattern(PATTERN, new LoggingEventPatternJsonProvider(), loggerContext));
    encoder.start();
    return encoder;

}

private static AbstractPatternJsonProvider<ILoggingEvent> withPattern(
        String pattern,
        AbstractPatternJsonProvider<ILoggingEvent> provider,
        LoggerContext context
        ) {

    provider.setContext(context);
    provider.setPattern(pattern);
    return provider;
}

}

Я ищу только конфигурацию на основе Java, не основанную на XML (у меня есть решение с XMLкоторый работает нормально).

Обновление Устранена проблема, я пропустил добавление @Configuration, теперь он работает как положено.

Не удалять поток, поскольку это может быть полезно для людей, которые ищут конфигурацию на основе Java для соответствующей конфигурации xml.

1 Ответ

0 голосов
/ 31 января 2019

@ Конфигурация отсутствует. Указывает, что класс объявляет один или несколько методов @Bean и может обрабатываться контейнером Spring для генерации определений и запросов на обслуживание для этих компонентов во время выполнения.

...