2010-04-08 4 views
37

Ich habe versucht, ein einfaches Logback-Projekt einzurichten, um meine Protokolldateien nach Datum und Dateigröße zu rollen, und bisher konnte ich meinen Appender nicht auf eine andere Datei übertragen . Stattdessen schreibt es in das Protokoll, das durch den Tag < file/> angegeben wird.Rolling Logback meldet sich bei Dateigröße und Zeit an

Hier ist meine logback.xml Konfigurationsdatei:

<?xml version="1.0"?> 
<configuration scan="true" scanPeriod="10 seconds"> 
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> 
     </layout> 
    </appender> 

    <appender name="milliroller" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>log/output.log</file> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> 
     </layout> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>log/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>1KB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 
    </appender> 

    <root level="DEBUG"> 
     <appender-ref ref="stdout"/> 
     <appender-ref ref="milliroller"/> 
    </root> 

    <logger name="com.tkassembled.logback" level="DEBUG"/> 
</configuration> 

Auf den ersten Blick sieht es aus wie es funktionieren sollte, nicht wahr? Gibt es etwas, was ich falsch mache? Mein gesamtes, baubares Projekt ist hier in einer Zip-Datei verfügbar: http://www.mediafire.com/file/2bxokkdyz2i/logback.zip

Antwort

87

Obwohl dies eine alte Frage ist, hatte ich das Gefühl, dass eine funktionierende Antwort jedem helfen kann, der diese Art der Implementierung benötigt.

Ich verwende die folgende Logback-Konfiguration, um ein HTML-Protokoll bereitzustellen, das nach Datum und Dateigröße gerollt wird, sowie die Protokollierung in der Konsole für die Debugging-Ausgabe.

Logfiles werden in einem logs Verzeichnis mit einem Namen von logFile.html während seiner aktiven gespeichert und logFile.2013-mm-dd.i.html, wenn es über Rollen, wobei i die Anzahl der 50MB-Log-Dateien ist. Zum Beispiel logFile.2013-01-07.0.html.

<configuration> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
    <encoder> 
     <charset>UTF-8</charset> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{35}) - %msg %n</pattern> 
    </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>logs\logFile.html</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover --> 
     <fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern> 
     <timeBasedFileNamingAndTriggeringPolicy 
      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
      <!-- or whenever the file size reaches 50MB --> 
     <maxFileSize>50MB</maxFileSize> 
     </timeBasedFileNamingAndTriggeringPolicy> 
     <!-- keep 30 days' worth of history --> 
     <maxHistory>30</maxHistory> 
    </rollingPolicy> 
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
     <charset>UTF-8</charset> 
     <layout class="ch.qos.logback.classic.html.HTMLLayout"> 
     <pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern> 
     </layout>   
    </encoder> 
    </appender> 

    <root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
    <appender-ref ref="FILE" />  
    </root> 

</configuration> 
+0

Danke! Logging in HTML ist sehr gut lesbar. –

+0

Siehe [AndreLDM's Antwort] (https://Stackoverflow.com/a/36707798/384674), diese Konfigurationsprotokolle 'SizeAndTimeBasedFNATP ist veraltet.' mit' debug = true' Option in 'logback.xml' – Betlista

+0

Nach meinem Test' maxHistory ist nicht die Anzahl der Tage, sondern die Anzahl der Dateien. Wenn Sie also mehr Dateien pro Tag haben, haben Sie weniger Tage ... – Betlista

-4

Sie sollten in der Lage sein, Ihr Protokoll mit einem FileHandler einzurichten.

http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/FileHandler.html#FileHandler(java.lang.String, int, int)

Dies nimmt eine Größenbeschränkung Datei und dreht das Protokoll, wenn es diese Grenze trifft.

+0

Das ist hilfreich, aber eigentlich suche ich nach einer Lösung innerhalb von Logback. Logback ist eine großartige Bibliothek und ich würde sie gerne nutzen, vorausgesetzt natürlich, dass ich das aufstocken kann. –

34

Seit logback 1.1.7 (freigegebener März 2016) ein neuer appender genannt SizeAndTimeBasedRollingPolicy zur Verfügung, das vereinfacht dramatisch, was Sie tun müssen:

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>app.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
     <fileNamePattern>app-%d{yyyy-MM-dd}.%i.log</fileNamePattern> 
     <maxFileSize>10MB</maxFileSize>  
     <maxHistory>30</maxHistory> 
     <totalSizeCap>1GB</totalSizeCap> 
    </rollingPolicy> 
    <encoder> 
     <pattern>%msg%n</pattern> 
    </encoder> 
</appender> 

here Siehe für weitere Informationen.

+0

Laut meinem Test ist 'maxHistory' nicht die Anzahl der Tage, sondern die Anzahl der Dateien. Wenn Sie also mehr Dateien pro Tag haben, haben Sie weniger Tage ... – Betlista

+0

Wenn es sich nicht um einen Fehler handelt, die [Dokumentation] (https://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy) ist klar, dass 'maxHistory' die Anzahl der Tage ist (beachten Sie den XML-Kommentar). – AndreLDM

+0

Nicht wirklich, [Dokumentation] (https://logback.qos.ch/manual/appenders.html#tbrpMaxHistory) liest "Die optionale maxHistory-Eigenschaft steuert die maximale Anzahl der zu speichernden Archivdateien ...", ihr Beispiel von monatlich Rollover ist ein bisschen verwirrend und Kommentar in XML ist wirklich falsch. Ich werde ihnen eine E-Mail schicken und ich werde es euch wissen lassen. – Betlista