2015-06-30 18 views
6

Próbuję programowo skonfigurować logstash z logback w moim Spring boot projektu, aby skonfigurować go za pomocą środowiska.Konfiguracja Logstash/Logback przy użyciu konfiguracji Spring-boot

W tym celu używam prostego @Configuration fasoli (środowisko uproszczony kod, będę potem gospodarz setup/Port użyciu):

@Component 
@Slf4j 
public class LogstashConfiguration { 

    private LogstashTcpSocketAppender logstashTcpSocketAppender; 

    @PostConstruct 
    public void init() { 
     Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); 
     LoggerContext loggerContext = rootLogger.getLoggerContext(); 
     //loggerContext.reset(); // shouldn't need to use that 

     logstashTcpSocketAppender = new LogstashTcpSocketAppender(); 
     logstashTcpSocketAppender.setName("logstash"); 
     logstashTcpSocketAppender.setContext(loggerContext); 
     logstashTcpSocketAppender.setRemoteHost("localhost"); 
     logstashTcpSocketAppender.setPort(4560); 

     PatternLayoutEncoder encoder = new PatternLayoutEncoder(); 
     encoder.setContext(loggerContext); 
     encoder.start(); 

     logstashTcpSocketAppender.setEncoder(encoder); 
     logstashTcpSocketAppender.start(); 

     rootLogger.addAppender(logstashTcpSocketAppender); 
     rootLogger.setLevel(Level.ALL); 
     rootLogger.warn("TEST"); 

} 

widzę że TcpSocketAppender loguje się moim logstash serwer, jednak nigdy nie otrzymam dziennika TEST. Ale widzę "TEST" w mojej konsoli.

Również jeśli konfiguracja rejestratora wspomniana w https://github.com/logstash/logstash-logback-encoder#tcp również działa.

Czy masz jakieś sugestie, aby wykonać tę pracę?

Dziękuję

Fabrice

+0

Witam, Jakiej konfiguracji używasz do logowania? Mam na myśli "logstash-logback.conf". – cody123

+0

czy masz wielu aplikantów? np. plik i logstashTcp? –

Odpowiedz

2

Właściwie appender został poprawnie zbindowanych do rejestratora, ale nie powiodło się połączenie z logstash z SocketException (złamane rury).

Aby rozwiązać ten problem, wystarczy użyć LogstashEncoder zamiast PatternLayoutEncoder.

+1

Bardzo pomocny. Próbowałem zrobić to samo. Zajęło mi trochę czasu, aby zrozumieć, że linia "PatternLayoutEncoder encoder = new PatternLayoutEncoder();" musiał zostać zmieniony na "LogstashEncoder encoder = new LogstashEncoder();". :) –