Я застрял с настройкой обратного входа на основе 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.