Ich arbeite an einer Spring-Boot-Anwendung, und ich möchte Tomcat Zugriff Protokolle durch meine Slf4j Logging-System und schließlich zu einem Remote-Syslog routen.Wie fügt man programmgesteuert ein AccessLogValve zu Tomcat hinzu?
Da es Frühling ist, möchte ich vermeiden, tomcat die Datei server.xml zu berühren.
Mein AccessLogValve ist ziemlich einfach:
import java.io.CharArrayWriter;
import org.apache.catalina.valves.AccessLogValve;
public class Log4JAccessLogValve extends AccessLogValve {
@Override
public void log(CharArrayWriter message) {
log.info(message.toString());
}
}
Und ich hatte gehofft, dass es möglich wäre, so etwas zu verwenden, um es Tomcat zu anschließen:
@Component
public class LogConfig {
@Autowired
private ServletContext servletContext;
@PostConstruct
public void setAccessLogValve() {
((ApplicationContextFacade)servletContext).addValve(new Log4JAccessLogValve());
}
}
mit Ausnahme der addValve() -Methode existiert nicht ...
Also ... hat jemand eine Idee, wie ich meinen AccessLogValve einhängen kann?
Ich bin auch offen für ganz andere Vorschläge Zugriffsprotokolle in einen Remote-Syslog zu bekommen, aber wir Dutzende von Mikro Dienstleistungen machen, so dass es ein ziemlich Standardansatz sein muss, das für jedes Mikro einfach zu implementieren ist Bedienung.
Ich habe jetzt versucht, eine Reihe von verschiedenen Versionen von diesem, aber mein log (CharArrayWriter Nachricht) Methode nie ausgeführt wird,: Es wird nicht Dateizugriffsprotokolldatei bezogene Funktionalität des AccessLogValve
Zum Beispiel initialisieren nach meinem Profiler ... Ich vermute, dass Tomcat das Ventil aus irgendeinem Grund nicht laufen lässt. – schuttek
Ist es möglich, dass factory.addContextValves() etwas hinzufügt, das nicht mit dem eigentlichen Tomcat-Server verbunden ist? – schuttek
Meine eigene Lösung wird ziemlich einfach sein: screw syslog ... es ist ein Hack auf einem veralteten System sowieso ... Ich werde nur Protokolle in das lokale Dateisystem ausgeben und logstash einrichten, um sie zu sammeln, zu zentralisieren und zu verarbeiten . Ich muss nur herausfinden, wie Tomcat alle 30 Sekunden oder so, seinen Zugriffsprotokoll Cache leeren, aber das ist eine andere Sache ... Danke für Ihre Hilfe Johnny, ich hoffe, es hilft jemand anderem :) – schuttek