1.application.yml中配置logback.xml的位置
2.logback.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--变量声明-->
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<property name="FILE_ERROR_PATH" value="D:/logs/mall/mall.%d{yyyy-MM-dd}.%i.error.log" />
<property name="FILE_INFO_PATH" value="D:/logs/mall/mall.%d{yyyy-MM-dd}.%i.info.log" />
<!--定义控制台输出-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 按照上面配置的LOG_PATTERN来打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--输出INFO日志文件配置-->
<appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按照上面配置的FILE_ERROR_PATH路径来保存日志 -->
<fileNamePattern>${FILE_INFO_PATH}</fileNamePattern>
<!-- 日志保存30天 -->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 单个日志文件的最大,超过则新建日志文件存储 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- 按照上面配置的LOG_PATTERN来打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--输出ERROR日志文件配置-->
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--只记录ERROR级别的日志-->
<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">
<!-- 按照上面配置的FILE_ERROR_PATH路径来保存日志 -->
<fileNamePattern>${FILE_ERROR_PATH}</fileNamePattern>
<!-- 日志保存30天 -->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 单个日志文件的最大,超过则新建日志文件存储 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- 按照上面配置的LOG_PATTERN来打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--级别大于等于INFO的则在控制台打印 默认是debug-->
<logger name="com.shop.admin" level="INFO" />
<!--级别大于等于INFO的执行appender为FILE的配置-->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE_INFO" />
<appender-ref ref="FILE_ERROR" />
</root>
</configuration>
3.解析
property标签:声明变量-我这里声明了三个变量,方便下面的appender使用,该格式中 LOG_PATTERN为日志打印的格式,FILE_ERROR_PATH和FILE_INFO_PATH为日志文件所在路径。
%date :表示日期,%thread :表示线程名,
%-5level :表示级别从左显示5个字符宽度,
%logger{36} :表示 Logger 名字最长36个字符,
%msg : 表示日志消息,
%n : 是换行符。
%i : 表示第 i 个文件,当日志文件达到指定大小时,会将日志生成到新的文件里,这里的 i 就是文件索引
appender标签:配置日志打印的位置,ConsoleAppender是用来表示日志输出到控制台,RollingFileAppender是用来表示日志将输出到文件,其字标签是其具体配置。logger标签是用来定义某个包或者某个类下的日志输出级别。root标签引用上面配置的三个appender否则appender无效。
4.结果
控制台输出即name=console的appender为INFO级别(Logger配置的INFO级别),大于等于INFO级别的日志都会打印在控制。台。
只为ERROR级别(filter控制)的日志会打印到由变量为FILE_ERROR_PATH声明的路径中。
大于等于INFO级别的日志会打印到由变量为FILE_INFO_PATH声明的路径中。
5.调用
logger.debug("=====测试日志debug级别打印===="); logger.info("======测试日志info级别打印====="); logger.error("=====测试日志error级别打印===="); logger.warn("======测试日志warn级别打印====="); //String a1 = null; //System.out.println( a1.length()); // 日志占位符使用 String aa = "testAA"; String bb = "testBB"; logger.info("aa:{};bb:{}", aa, bb);
6.结果