Machen Logback schreiben Sie die Konsole vor Ort, sondern um die log-Datei auf dem server
In eine web-Applikation gebaut mit Maven 3, gibt es eine Möglichkeit zu haben, Logback nutzen entweder ein ConsoleAppender
oder eine RollingFileAppender
je nachdem, wo/wie die Anwendung ausgeführt wird?
In der Produktion die .war-Datei bereitgestellt wird, die auf Tomcat 7. Lokal bei mir läuft das Jetty Maven plugin für Testzwecke während der Entwicklung.
Ich würde gerne das logging funktioniert so:
- Wenn ich
mvn jetty:run
lokal: Verwenden SieConsoleAppender
- Wenn
*.war
- Datei bereitgestellt wird, die auf die Produktion (Tomcat 7): Verwenden SieRollingFileAppender
Während der lokalen Entwicklung scheint es nur sehr komfortabel, haben alle log-Ausgaben auf der Konsole. In der Produktion würde ich stattdessen lieber in Datei protokollieren: CATALINA_BASE/logs/myApp.log
.
Natürlich könnten Sie einfach beide ein ConsoleAppender
und ein RollingFileAppender
im logback.xml
. Aber mir scheint es unnötig redundant, um alle log-Ausgabe auf die Produktion geschrieben STDOUT
UND in eine log-Datei. Auch aus der Tomcat-Dokumentation, es klingt wie Protokollierung von STDOUT auf die Produktion ist eine schlechte Praxis im Allgemeinen.
Konnte ich nicht finden keine schönen Lösungen, die auf dem web. Gibt es eine gute Lösung für dieses?
Hier ist meine aktuelle logback.xml
die immer Protokolle STDOUT
und an die gewünschte log-Datei:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/myApp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${catalina.base}/logs/myApp.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.myDomain.myApp" level="DEBUG" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mithilfe von Profilen können Sie wechseln zwischen der Umwelt. Angenommen, Sie haben zwei verschiedene logback.xml Dateien für die lokal-und prod. Erstellen Sie eine logback-Verzeichnis in Ihrem Ressourcen-Verzeichnis. Innerhalb der Ressourcen-Verzeichnis, erstellen Sie eine Umwelt bestimmten Verzeichnis. der name des Verzeichnisses und envName innerhalb Eigentum entsprechen sollte. Hier ist ein Beispiel.
Und während der Nutzung laufen maven-Befehl aus, den Sie angeben, die Profil.
Hatte ich das selbe Bedürfnis und es stellte sich heraus, ganz einfach mit der Hilfe von spring boot"ifulness" und bedingte Unterstützung für logback. Das folgende ist eine Vorlage, die ich kam mit, dass könnte für jede app, denn es schafft die logfile mit spring.applcation.Namen wenn zur Verfügung, die Sie definieren können, in bootstrap.Eigenschaften:
Wenn spring-boot-Anwendung mit starter Elternteil, Sie müssen nur fügen Sie den folgenden, um Ihre pom.xml:
Eine Sache, die ich in der Vergangenheit getan haben mit log4j ist, eine
log4j.xml
config-Datei in der web-appsrc/test/resources
- Verzeichnis. Dann konfigurierte ich Jetty enthalten die test-classes-Verzeichnis (<useTestScope>true</useTestScope>
).Für Ihr Beispiel, logback.xml mit der ConsoleLogger wäre in
src/test/resources
während logback.xml mit RollingFileAppender geht insrc/main/resources
.Ist dies nicht eine große Lösung in allen Fällen, aber für die mine, es war einfach und funktionierte gut.
Konfigurieren Sie den logback und Profil-Informationen. Keine änderungen in POM erforderlich
Müssen Sie Möglicherweise gehören unter spring-Dateien, sowie
Für mehr info Kasse logback