2016-08-23 16 views
5

W moim wiosennym projekcie startowym z przypisanymi klasami "@ Slf4j" dla niektórych klas chcę się zalogować do innego pliku. Ale nie mogłem wymyślić, jak to zrobić. Mam jeden plik logback-spring.xml, który odwołuje się od moich pliku właściwości tak:Wiosenny rozruch wielu plików dziennika

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

Czy muszę utworzyć kolejny plik logback-spring.xml teraz? lub mogę skonfigurować go w bieżącym pliku, a jeśli tak, to w jaki sposób mogę wybrać, który program rejestrujący ma być używany.

Odpowiedz

3

Po prostu dodaj kolejnego loggera i aplikanta. Dla przykładu użyłem następujące 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> 

W kodzie można uzyskać dostęp do rejestratora z:

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

Pozwoli to uzyskać audit-log rejestrator i użyć FILE-AUDIT aplikant.

W „standart” appender jest używany z dowolnej klasy, która jest w określonym opakowaniu:

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

ten użyje <logger name="com.myCompany.myProject" level="info" additivity="false"> i obviosly appender pliku.

+0

dziękuję, ale wypróbowałem twój kod, ale nie widzę nowego pliku dziennika kontroli utworzonego w dowolnym miejscu. Może muszę zdefiniować coś takiego w nieruchomościach? logging.config = ścieżka – Spring

+0

@Spring Spójrz na '' Plik powinien znajdować się w '/ var/applications/myProject/applogs/myProject_audit.log' lub dowolną ścieżką, którą ustawisz 'KATALOG_GŁÓWNY'. Sprawdź również, czy aplikacja ma prawa do zapisu w katalogu. –

+0

thx ale nadal nie działa, sprawdziłem prawa (ls -la) wygląda tak samo jak mój inny domyślny plik dziennika – Spring

Powiązane problemy