logback日志配置在springboot,logback.xml配置,自动提示,约束,命名空间等一些配置详解,以及配置日志后控制台无法打印异常信息
logback日志xml配置详解,包含每个标签的作用,防止忘记或者直接复制即可使用,需注意应将该文件命名为logback.xml或者logback-spring.xml,放在resource下
<?xml version="1.0" encoding="utf-8" ?>
<!--此处可以写入命名空间,自动提示,将下面的粘贴后,将鼠标放在raw.githubusercont这个网址上,点击alt+enter,选择fetch导入即可拥有自动提示-->
<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
<!--注:配置文件中级别不区分大小写-->
<!--此处不做讲解,此处为处理配置日志后控制台无法打印异常信息的错误,详解见root节点开始-->
<appender name="rootApp" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%19d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--设置根记录器级别,默认为debug,当然你也可以不设置,在springBoot中默认为info-->
<root level="info">
<appender-ref ref="rootApp"></appender-ref>
</root>
<!-- 附加器,是负责写日志的组件,主要负责将日志写入文件或者控制台,name表示名字,自己随意设置,后面的记录器将配置通过name来选择附加器-->
<!-- class表示附加器的实现类,logback自带有三个,根据需求自行选择使用,-->
<!-- 第一个:ch.qos.logback.core.ConsoleAppender将日志输出到控制台,-->
<!-- 第二个:ch.qos.logback.core.FileAppender将日志输出到文件-->
<!-- 第三个滚动文件附加器:ch.qos.logback.core.rolling.RollingFileAppender-->
<!-- 下面示例了三种附加器-->
<!-- 1.控制台附加器-->
<appender name="LOGIN_USER_FEATURE_CONSLOG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 默认情况下,每个日志事件都会立即刷新到基础输出流。这种默认方法更安全,因为如果应用程序在没有正确关闭appender的情况下退出,则日志事件不会丢失 -->
<!-- 但为了显着增加日志记录吞吐量,可以将immediateFlush属性设置为false -->
<!-- <immediateFlush>true</immediateFlush>-->
<!-- 日志模板,即输出的日志格式-->
<pattern>
<!--%d表示日期,自动填写,{yyyy-MM-dd HH:mm:ss}表示时间的格式,我们可以修改格式如{yyyy-MM-dd HH:mm}记录到分种,或者直接用%dat即可,与其效果一致-->
<!--对于%d我们也可以规定其长度,如%30date,表示长30个字符,不够的左侧空格补齐,在%-30date加负号表示右侧补齐,这种加数字长度可以适用于所有-->
<!-- %class表示打印日志的语句在哪个类中-->
<!-- %line表示打印日志语句在哪一行 -->
<!--%level表示日志级别-->
<!-- %thread表示打印日志的语句所在线程的名字 -->
<!-- %15.15():括号内填内容,如%15.15(%thread)则表示线程名字符长度小于15(第一个)则用空格在左侧补齐,如果字符长度大于15(第二个),则从开头开始截断多余的字符 -->
<!-- %msg:打印日志消息,即为我们代码中填写的消息,如log.info("ccc"),则%msg会打印ccc -->
<!-- %n:换行符,一般用于最后,下一条日志换行打印 -->
<!-- %highlight():转换说明符,括号内填内容,如%highlight(%level)以粗体红色显示其级别为ERROR的事件,红色为WARN,BLUE为INFO,以及其他级别的默认颜色 -->
<!--%red(),红色显示,括号填内容,如%red(%date{yyyy-MM-dd HH:mm:ss})表示红色显示日期,red可变,如%blue()-->
<!--%logger{40}——日志输出者的名字-->
%22d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
</pattern>
<!--输出编码 UTF-8 -->
<charset>UTF-8</charset>
</encoder>
<!-- 过滤器,可以只记录符合级别的日志,如下,只记录info级别的,写法如下示例-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 过滤器,class有两个类,另一个ch.qos.logback.classic.filter.ThresholdFilter
写法如下示例,表示比info级别高的均可输出,当不写过滤器时,默认采用此配置,级别与记录器一致-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
</appender>
<!-- 2.文件附加器,在该附加器需要指定日志输出的文件路径,可以是绝对路径,也可以只指定文件名,默认放在项目路径下-->
<appender name="LOGIN_USER_FEATURE_FILE" class="ch.qos.logback.core.FileAppender">
<encoder>
<!-- 日志模板,即输出的日志格式-->
<pattern>
%22d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
</pattern>
</encoder>
<!--日志输出的路径 -->
<file>D:/log/logfile.log</file>
<!-- 日志追加,即true表示在以前的日志后追加日志,false表示覆盖掉以前的日志,一般用true-->
<append>true</append>
</appender>
<!-- 3.滚动文件附加器,在该文件中需要设置文件路径以及滚动策略,常用滚动策略有两种,在下面有解释-->
<appender name="LOGIN_USER_FEATURE_ROLLFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>
%22d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
</pattern>
</encoder>
<!--日志输出的路径 -->
<file>D:/log2/logfile.log</file>
<append>true</append>
<!--class:滚动策略,两种,
1.基于时间的策略ch.qos.logback.core.rolling.TimeBasedRollingPolicy,如每天或者每小时生成一个日志文件
2.基于时间和日志文件大小SizeAndTimeBasedRollingPolicy,该策略既根据时间,也根据文件大小-->
<!--示例1.基于时间的策略ch.qos.logback.core.rolling.TimeBasedRollingPolicy -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名生成模式,如按日期中的每天来生成日志文件,填入%d{yyyy-MM-dd}.log ,如按秒 %d{yyyy-MM-dd HH-mm-ss},如按年创建目录,文件放在年份下%d{yyyy/MM-dd}
其于<file>区别在于,当前也就是今天的日志记录会记录在<file>的D:/log2/logfile.log文件中,
今天过去,则会将logfile.log文件名修改为<fileNamePattern>设置的文件名-->
<fileNamePattern>roll_%d{yyyy-MM-dd}.log</fileNamePattern>
<!--历史日志数量,如3则表示,保存最近3个的日志文件,3个以前的删除-->
<maxHistory>3</maxHistory>
<!--该策略下所有的日志文件总大小,如5GB示,总大小不超过5GB,超过则把以前的删除-->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<!--示例2.基于时间和大小的策略,与基于时间策略相比,其多一个属性<maxFileSize>,
并且<fileNamePattern>属性需要设置下标,如%i,表示当天文件超过大小,新建一个今天的日志文件1(从0开始)继续写入日志 -->
<!-- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>rollSizeTime_%d{yyyy-MM-dd}%i.log</fileNamePattern>
<maxHistory>3</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
单个日志文件最大大小
<maxFileSize>50MB</maxFileSize>
</rollingPolicy> -->
</appender>
<!--设置记录器,名字、日志级别自行设置-->
<logger name="com.yanzi.config.myIntercepter.MyIntercepter" level="INFO">
<!-- 通过ref引入附加器名字name,表示该纪录器使用这个附加器,可以指定多个附加器,例如既使用控制台又使用文件,就会在控制台和文件均输出日志-->
<appender-ref ref="LOGIN_USER_FEATURE_CONSLOG"></appender-ref>
<appender-ref ref="LOGIN_USER_FEATURE_FILE"></appender-ref>
</logger>
<logger name="com.yanzi.controller.FileController" level="error">
<!-- 通过ref引入附加器名字name,表示该纪录器使用这个附加器,可以指定多个附加器,例如既使用控制台又使用文件,就会在控制台和文件均输出日志-->
<appender-ref ref="LOGIN_USER_FEATURE_FILE"></appender-ref>
</logger>
<!-- 定义日志文件的存储地址和前缀名,简单说就是定义变量,后面可以使用${xx}来使用变量,如需使用请将这样的内容提至更上方 -->
<!--示例,我有不同类型日志,但是都放在一个文件下,一改文件夹,所有日志路径配置都需要改,此时可以使用该属性,即相同字符串可以使用名字
示例:D:/log文件夹用log_HOME表示,如果使用D:/log/ceshi.log,可以用${LOG_HOME}/ceshi.log表示}
当然,不仅是路径可以使用-->
<property name="LOG_HOME" value="D/log"/>
</configuration>
需注意,logback-spring.xml比logback.xml多了一个环境标签,可以切换环境,如dev开发环境,生产环境等
如果配置日之后出现控制台无法打印异常信息
应该此时将root节点配置附加器appender,示例如下,此时即可正常打印
<appender name="rootApp" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%19d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--注:配置文件中级别不区分大小写-->
<!--设置根记录器级别,默认为debug,当然你也可以不设置,在springBoot中默认为info-->
<root level="info">
<appender-ref ref="rootApp"></appender-ref>
</root>