2015-06-30 9 views
6

Ich versuche, Logstash mit Logback in meinem Spring-Boot-Projekt zu konfigurieren, um es mit der Umgebung einzurichten.Logstash/Logback-Setup mit Spring-Boot-Konfiguration

Um dies zu tun, verwende ich eine einfache @Configuration Bohne (vereinfachte Code, werde ich dann mit Umgebungskonfiguration Host/Port):

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

} 

Ich kann sehen, dass die TcpSocketAppender auf meinem logstash loggt Server, jedoch erhalte ich nie das TEST-Protokoll. Aber ich kann "TEST" in meiner Konsole sehen.

Auch wenn ein Setup der Logger funktioniert es in https://github.com/logstash/logstash-logback-encoder#tcp auch, wie erwähnt.

Haben Sie Vorschläge, diese Arbeit zu machen?

Danke,

Fabrice

+0

Hallo, Welche Konfiguration verwenden Sie für Logstash ?? Ich meine "logstash-logback.conf". – cody123

+0

Haben Sie zufällig mehrere Appender? zB Datei und logstashTcp? –

Antwort

2

Eigentlich wurde die appender richtig an den Logger binded, aber Verbindung mit einem Socket (Rohrbruch) gescheitert logstash.

Um es zu lösen, musste ich nur LogstashEncoder anstelle von PatternLayoutEncoder verwenden.

+1

Sehr hilfreich. Ich habe versucht, das Gleiche zu tun. Nahm mich ein wenig, um zu verstehen, dass die Zeile "PatternLayoutEncoder encoder = new PatternLayoutEncoder();" musste in "LogstashEncoder encoder = new LogstashEncoder();" geändert werden. :) –