2015-06-30 177 views
6

我試圖以編程方式在我的Spring引導項目中設置logshash與logback,以便使用環境進行設置。使用Spring-boot配置設置Logstash/Logback

爲了做到這一點,我用一個簡單@Configuration豆(簡化代碼,那麼我就要設置主機/端口的使用環境):

@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"); 

} 

我可以看到TcpSocketAppender是我logstash登錄服務器,但我永遠不會收到測試日誌。但是我可以在我的控制檯中看到「TEST」。

另外,如果設置記錄器在https://github.com/logstash/logstash-logback-encoder#tcp中提到的它也可以。

你有什麼建議可以做到嗎?

謝謝

法布里斯

+0

嗨,你用什麼配置logstash?我的意思是「logstash-logback.conf」。 – cody123

+0

你碰巧有多個appender嗎?例如文件和logstashTcp? –

回答

2

其實附加器正確綁定到記錄器,但連接logstash失敗的SocketException(破管)。

爲了解決這個問題,我只需要使用LogstashEncoder而不是PatternLayoutEncoder。

+1

非常有幫助。我試圖做同樣的事情。花了一點時間才明白,「PatternLayoutEncoder encoder = new PatternLayoutEncoder();」必須改爲「LogstashEncoder編碼器=新的LogstashEncoder();」。 :) –