logback配置文件
logback 取代 log4j 的理由:Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小了。
-
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
-
logback 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="TRACE"/>
<!-- 开发、测试环境 -->
<springProfile name="dev,test">
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="INFO"/>
<logger name="com.zl" level="DEBUG"/>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<logger name="org.springframework.web" level="ERROR"/>
<logger name="org.springboot.sample" level="ERROR"/>
<logger name="com.zl" level="ERROR"/>
</springProfile>
</configuration>
在 application.yml 指定日志配置文件
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl # 配置mybatis日志打印
logging:
config: classpath:logback-dev.xml # 指定logback配置文件
file:
path: D:/log # 指定日志输出的目录
- logback 的配置文件详细说明:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<property name="LOG_HOME" value="D:\log"/>
<property name="LOG_PREFIX" value="log-info"/>
<springProperty scope="context" name="appName" source="spring.application.name"/>
<!--
%p:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r:输出自应用启动到输出该日志讯息所耗费的毫秒数
%t:输出产生该日志事件的线程名
%f:输出日志讯息所属的类别的类别名
%c:输出日志讯息所属的类的全名
%d:输出日志时间点的日期或时间,指定格式的方式: %d{yyyy-MM-dd HH:mm:ss}
%l:输出日志事件的发生位置,即输出日志讯息的语句在他所在类别的第几行。
%m:输出代码中指定的讯息,如log(message)中的message
%n:输出一个换行符号
-->
<!--
Appender: 设置日志信息的去向,常用的有以下几个
ch.qos.logback.core.ConsoleAppender (控制台)
ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新文件)
ch.qos.logback.core.FileAppender (文件,不推荐使用)
-->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<!– 被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建 –>-->
<file>${LOG_HOME}/${LOG_PREFIX}-${appName}-%d{yyyy-MM-dd}.log</file>
<!--RollingFileAppender:-->
<!--滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<!--<rollingPolicy>:当发生滚动时,决定RollingFileAppender 的行为,涉及文件移动和重命名。-->
<!--TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--<fileNamePattern>:
必要节点,包含文件名及“%d”转换符, “%d”可以包含一个 java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。
如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender 的file字节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;
如果没设置file,活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。-->
<!--<fileNamePattern>${LOG_HOME}/daily/${appName}-log.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>-->
<!--压缩文件的保存路径以及保存格式,这里必须将文件压缩,.%i 必须有。如果按上面的配置会报错-->
<fileNamePattern>${LOG_HOME}/daily/${appName}-log.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<TimeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--保存文件的大小,超过该大小自动创建新文件。旧文件压缩保存到daily目录下-->
<MaxFileSize>20MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
<!--<!– 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,如果是6,则只保存最近6天的文件,删除之前的旧文件 包括压缩文件 –>-->
<!--<!– 每产生一个日志文件,该日志文件的保存期限天数 –>-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!--<encoder>:对记录事件进行格式化。-->
<encoder>
<!--格式化输出:%d表示日期,后面跟时间格式,默认%data{yyyy-MM-dd},%thread表示线程名, %msg:日志消息,%n是换行符-->
<pattern>
${CONSOLE_LOG_PATTERN}
<!-- %(console-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger) - -->
<!-- %cyan(%msg%n)-->
</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
<!-- 使用默认输出(spring-boot-[tag].RELEASE.jar/org/springframework/boot/logging/logback/defaults.xml) -->
${CONSOLE_LOG_PATTERN}
<!-- %(console-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger) - -->
<!-- %cyan(%msg%n)-->
</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="org.mybatis" level="debug"/>
<logger name="org.apache.ibatis" level="debug"/>
<springProfile name="local,dev">
<!--root是默认的logger 这里设定输出级别是info-->
<root level="INFO">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
<springProfile name="test,uat">
<root level="INFO">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
</configuration>