原来的日志在服务器上采用的是cronolog组件按天分割的日志,没什么大问题,因为本地也就控制台看下;到服务端才需要正在的日志文件来核查问题。但是介于spring本来自带不用,用第三方的插件太麻烦(测试嫌麻烦)。所以优化源代码采用logback-spring.xml的配置来打日志。
直接上代码:
对应pom
<dependency>
<!-- logback condition 需要用到 -->
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
</dependency>
对应根目录配置logback-spring.xml内容:
<configuration debug="true" scan="true" scanPeriod="30 minutes">
<springProperty scope="context" name="logFileDir" source="logback.logFileDir"/>
<!-- 当前日志存放路径(路径末尾不要带“/”),设置默认值 -->
<property name="LOG_FILE_DIR" value="${logFileDir}/${appName}" />
<property name="HIS_LOG_FILE_DIR" value="${logFileDir}/${appName}/history" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS}|%level|%logger{36}:%line|%thread|%msg%n</pattern>
</encoder>
</appender>
<if condition='property("logFileDir") != null && !property("logFileDir").isEmpty() && !"bootstrap".equals(property("appName"))'>
<then>
<!-- 文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE_DIR}/debug.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${HIS_LOG_FILE_DIR}/%d{yyyy-MM/dd/HH}-debug.gz</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS}|%level|%logger{36}:%line|%thread|%X{trackNo}|%msg%n</pattern>
</encoder>
</appender>
</then>
</if>
</configuration>
yml文件配置:
logback:
#非开发环境是否开启控制台日志
enableConsoleLogWhenNotInDev: false
#**日志文件存放目录,目录后面无需再加"/"。备注如果这项不配置,则不输出日志文件
logFileDir: /acc-Log
需要注意的就是文件路劲配置。
哦对了,日志打印基于:org.slf4j.LoggerFactory
//注意:启动类不应先加载Logger,优先让spring去初始化Logger的配置,否则日志输出会异常
LoggerFactory.getLogger(PayApplication.class);
基本一切正常日志按需输出。