2016-08-23 67 views
5

在我的带有“@ Slf4j”注释类的Spring引导项目中,对于某些类我想登录到不同的文件。但无法弄清楚如何做到这一点。我有一个的logback-spring.xml文件,该文件是从我的属性引用的文件是这样的:Spring引导多个日志文件

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

我必须现在创建另一个的logback-spring.xml文件?或者我可以在当前文件中配置它,如果那么我该如何选择使用哪种记录器。

回答

3

只需添加另一个记录器和appender。 例如我用下面的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> 

在代码中,你可以访问记录:

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

这将得到audit-log记录仪和使用FILE-AUDIT附加目的地。

的“非标准”附加器一起使用的任何类,它是在指定的包:

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

这将使用<logger name="com.myCompany.myProject" level="info" additivity="false">和obviosly的FILE附加器。

+0

谢谢,但我试过你的代码,但不能看到任何地方创建一个新的审计日志文件。也许我需要在属性中定义这样的东西? logging.config = path – Spring

+0

@Spring查看''该文件应该放在'/ var/applications/myProject/applogs/myProject_audit.log'或任何你设置'LOGS_HOME'的路径。同时检查应用程序是否有权在目录中写入。 –

+0

thx但仍然没有工作,我检查了权利(ls -la)它的外观与我的其他默认日志文件相同 – Spring