spring-boot log

最近也在研究项目🀄️的日志配置,发现的问题有:
1.项目启动时提示日志冲突。
2.log4j配置文件不管用。
3.生产环境日志分割方法。(有的分割了,有的没有分割)
4.生产环境日志名称不是我在日志文件中配置的。

为了解决这些问题,我查阅了Spring boot的日志相关配置。
原来Spring boot用的默认就是logback。关于logback,原来是log4j的作者又一经典日志框架。我就不详细赘述了。
产生上述问题的原因是:
1.查看我的pom文件,原来我引用了多个日志框架,才导致项目启动时日志冲突,
2.但是我的项目默认使用的还是logback,(spring-boot-starter-logging)所以我的log4j配置文件不起作用。
3.生产环境的日志原来是在项目启动的时候在一个config文件里配置的,和项目名称一样,并且默认打印的是控debug级别的日志。它的分割也是运维人员用的linux脚本。

我的解决方式:
1.我就用logback了,所以删除其他的log框架,排除其他的log框架(如果其他的jar里有多余的话)
2.创建logback-spring.xml在resources目录下。
3.我并没有删除原来的服务器上配置的文件,运维人员已经分割了,我就同时保留吧。
下面是logback-spring.xml的配置模版:
<?xml version="1.0" encoding="UTF-8"?>

<!--

   根节点包含的属性

  • scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
  • scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scantrue时,此属性生效。默认的时间间隔为1分钟。
  • debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false
-->
<configuration
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"
        debug="false" scan="true" scanPeriod="30 second">
    <property name="PROJECT" value="ua-admin" />
    <property name="ROOT" value="/logs/${PROJECT}/" />
<!--日志最大限制--> <property name="FILESIZE" value="50MB" />
  <!--日志保留15天--> <property name="MAXHISTORY" value="15"/> <!-- 控制台打印 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder charset="utf-8"> <pattern>[%-5level] %date{yyyy-MM-dd HH:mm:ss} [%thread] %c:%L %M : %m%n </pattern> </encoder> </appender> <!-- ERROR 输入到文件,按日期和文件大小 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder charset="utf-8"> <pattern>[%-5level] %date{yyyy-MM-dd HH:mm:ss} [%thread] %c:%L %M : %m%n </pattern> </encoder> <!--默认的日志名称 --> <file>${ROOT}/error.log</file> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${ROOT}/error.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>${MAXHISTORY}</maxHistory> <!--<timeBasedFileNamingAndTriggeringPolicy--> <!--class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">--> <!--<maxFileSize>${FILESIZE}</maxFileSize>--> <!--</timeBasedFileNamingAndTriggeringPolicy>--> </rollingPolicy> </appender> <!-- WARN 输入到文件,按日期和文件大小 --> <!--<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">--> <!--<encoder charset="utf-8">--> <!--<pattern>[%-5level] %date{yyyy-MM-dd HH:mm:ss} [%thread] %logger{36} - %m%n--> <!--</pattern>--> <!--</encoder>--> <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">--> <!--<level>WARN</level>--> <!--<onMatch>ACCEPT</onMatch>--> <!--<onMismatch>DENY</onMismatch>--> <!--</filter>--> <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--> <!--<fileNamePattern>${ROOT}%d/warn.%i.log</fileNamePattern>--> <!--<maxHistory>${MAXHISTORY}</maxHistory>--> <!--<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">--> <!--<maxFileSize>${FILESIZE}</maxFileSize>--> <!--</timeBasedFileNamingAndTriggeringPolicy>--> <!--</rollingPolicy>--> <!--</appender>--> <!-- INFO 输入到文件,按日期和文件大小 --> <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder charset="utf-8"> <pattern>[%-5level] %date{yyyy-MM-dd HH:mm:ss} [%thread] %c:%L %M : %m%n </pattern> </encoder> <file>${ROOT}/info.log</file> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${ROOT}/info.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>${MAXHISTORY}</maxHistory> <!--<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">--> <!--<maxFileSize>${FILESIZE}</maxFileSize>--> <!--</timeBasedFileNamingAndTriggeringPolicy>--> </rollingPolicy> </appender> <!-- DEBUG 输入到文件,按日期和文件大小 --> <!--<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">--> <!--<encoder charset="utf-8">--> <!--<pattern>[%-5level] %date{yyyy-MM-dd HH:mm:ss} [%thread] %logger{36} - %m%n--> <!--</pattern>--> <!--</encoder>--> <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">--> <!--<level>DEBUG</level>--> <!--<onMatch>ACCEPT</onMatch>--> <!--<onMismatch>DENY</onMismatch>--> <!--</filter>--> <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--> <!--<fileNamePattern>${ROOT}%d/debug.%i.log</fileNamePattern>--> <!--<maxHistory>${MAXHISTORY}</maxHistory>--> <!--<timeBasedFileNamingAndTriggeringPolicy--> <!--class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">--> <!--<maxFileSize>${FILESIZE}</maxFileSize>--> <!--</timeBasedFileNamingAndTriggeringPolicy>--> <!--</rollingPolicy>--> <!--</appender>--> <!-- TRACE 输入到文件,按日期和文件大小 --> <!--<appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">--> <!--<encoder charset="utf-8">--> <!--<pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n--> <!--</pattern>--> <!--</encoder>--> <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">--> <!--<level>TRACE</level>--> <!--<onMatch>ACCEPT</onMatch>--> <!--<onMismatch>DENY</onMismatch>--> <!--</filter>--> <!--<rollingPolicy--> <!--class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--> <!--<fileNamePattern>${ROOT}%d/trace.%i.log</fileNamePattern>--> <!--<maxHistory>${MAXHISTORY}</maxHistory>--> <!--<timeBasedFileNamingAndTriggeringPolicy--> <!--class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">--> <!--<maxFileSize>${FILESIZE}</maxFileSize>--> <!--</timeBasedFileNamingAndTriggeringPolicy>--> <!--</rollingPolicy>--> <!--</appender>--> <!-- SQL相关日志输出--> <!--<logger name="org.apache.ibatis" level="INFO" additivity="false" />--> <!--<logger name="org.mybatis.spring" level="INFO" additivity="false" />--> <!--<logger name="com.github.miemiedev.mybatis.paginator" level="INFO" additivity="false" />--> <!-- Logger 根目录 上面的配置写到这个里面就会生成相应的日志文件 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <!--<appender-ref ref="DEBUG" />--> <appender-ref ref="ERROR" /> <!--<appender-ref ref="WARN" />--> <appender-ref ref="INFO" /> <!--<appender-ref ref="TRACE" />--> </root> </configuration>
彩🥚:可以在类名上添加@slf4j 替代 我们经常写的 private static final Logger logger = LoggerFactory.getLogger(XXX.class); 这句话。这样们就可以使用log.info("")啦。
但是要加入lombok依赖。 因为@slf4j是lombok提供的。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>


我参考了:看这里
错误的写法导致生产环境日志打印的时间一直是项目启动时间。
(日志格式中的日期不可以写成 %d{${DATETIME}})
DATETIME引用timestamp

<timestamp key="DATETIME" datePattern="yyyy-MM-dd HH:mm:ss" />
这样引用打印日志的时间不会变。
posted @ 2018-08-28 17:26  平淡有从容  阅读(533)  评论(0)    收藏  举报