2016-08-23 9 views
5

In meinem Spring-Boot-Projekt mit "@ Slf4j" annotierten Klassen, für bestimmte Klassen möchte ich in einer anderen Datei protokollieren. Aber konnte nicht herausfinden, wie das geht. Ich habe eine logback-spring.xml-Datei, die von meinen Eigenschaften wie folgt referenziert Datei:Spring boot mehrere Protokolldateien

logging.config= path/to/logback-spring.xml 
logging.file=myCurrentLogFile.log 

Muss ich jetzt eine andere logback-spring.xml-Datei erstellen? oder ich kann es in der aktuellen Datei konfigurieren, und wenn dann, wie kann ich wählen, welcher Logger wann verwendet werden soll.

Antwort

3

Fügen Sie einfach einen weiteren Logger und Appender hinzu. Zum Beispiel habe ich die folgende logback.xml

<property name="LOGS_HOME" value="/var/applications/myProject/applogs/" /> 

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <Pattern> 
      %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n 
     </Pattern> 
    </layout> 
</appender> 

<appender name="FILE" 
    class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${LOGS_HOME}myProject_log.log</file> 
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
     <Pattern> 
      %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n 
     </Pattern> 
    </encoder> 

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- rollover daily --> 
     <fileNamePattern>${LOGS_HOME}myProject_log.%d{yyyy-MM-dd}.%i.log</fileNamePattern> 
     <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
      <maxFileSize>100MB</maxFileSize> 
     </timeBasedFileNamingAndTriggeringPolicy> 
    </rollingPolicy> 
</appender> 

<appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${LOGS_HOME}myProject_audit.log</file> 
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
     <Pattern> 
      %d{yyyy-MM-dd HH:mm:ss};%msg%n 
     </Pattern> 
    </encoder> 

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- rollover daily --> 
     <fileNamePattern>${LOGS_HOME}myProject_audit.%d{yyyy-MM-dd}.%i.log</fileNamePattern> 
     <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
      <maxFileSize>100MB</maxFileSize> 
     </timeBasedFileNamingAndTriggeringPolicy> 
    </rollingPolicy> 
</appender> 

<logger name="com.myCompany.myProject" level="info" additivity="false"> 
    <appender-ref ref="FILE" /> 
    <appender-ref ref="STDOUT" /> 
</logger> 

<logger name="audit-log" level="info" additivity="false"> 
    <appender-ref ref="FILE-AUDIT" /> 
    <appender-ref ref="STDOUT" /> 
</logger> 

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

Im Code, den Sie den Logger mit zugreifen:

private static Logger audit = LoggerFactory.getLogger("audit-log"); 

Diese erhalten die audit-log Logger und verwenden FILE-AUDIT Appender.

Der "standart" appender wird mit jeder Klasse verwendet, die in dem angegebenen Paket ist:

private static Logger logger = LoggerFactory.getLogger(MyApplication.class); 

Dies wird die <logger name="com.myCompany.myProject" level="info" additivity="false"> und obviosly der FILE appender verwenden.

+0

danke, aber ich habe versucht, Ihren Code, aber kann nicht eine neue Audit-Log-Datei irgendwo erstellt. Vielleicht muss ich so etwas in Eigenschaften definieren? logging.config = Pfad – Spring

+0

@Spring Betrachten Sie '' Die Datei sollte in '/ var/applications/myProject/applogs sein/myProject_audit.log' oder auf den Pfad, den Sie 'LOGS_HOME' festgelegt haben. Überprüfen Sie auch, ob die Anwendung Rechte zum Schreiben in das Verzeichnis hat. –

+0

thx, aber immer noch nicht funktionieren, ich überprüft die Rechte (ls -la) es sieht genauso aus wie meine andere Standard-Log-Datei – Spring