<?xml version="1.0" encoding="UTF-8"?>
<!-- debug 配置是否需要打印logback内部的日志信息 -->
<!-- scan 用来指定当前配置文件是否需要定期扫描,以便文件发生改变时候可以重新加载-->
<!-- scanPeriod 扫描间隔时间,默认是毫秒,跟scan搭配使用 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<!-- 五个日志级别 trace < debug < info < warn < error -->
<!-- property元素可以理解为定义一个变量,后续可以通过${log.filePath}来获取对应的value -->
<property name="log.filePath" value="E://logs/" />
<!-- 所有的appender,可以理解为具体的日志打印工具类,
不同的类输出目的地不一样,如控制台、文件、数据库、网络io传输等待 -->
<!-- ConsoleAppender就是一个往控制台打印的日志工具类 -->
<!-- 输出到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 定义日志输出格式 -->
<!-- %date简写%d 表示输出日期,后面的{yyyy-MM-dd}表示日期格式 -->
<!-- %thread简写%t 表示当前使用日志的线程名称 -->
<!-- %level简写%p 表示输出打印日志的级别,注意简写是p不是l,
中间的-5表示固定占5个长度,不够5个长度,右边补空格,如果是5,表示左边补齐空格,
如果超过5个,则原样输出-->
<!-- %file 表示打印日志的类名java结尾的类名,如Slf4jTest.java -->
<!-- %line 表示当前打印日志在文件的位置,第几行 -->
<!-- %r 表示getLogger()开始到现在打印当前日志走过的时间毫秒数,一般好像不怎么用这个 -->
<!-- %c 表示日志讯息所使用的类的全名,个人测试发现跟%logger是一样的结果 -->
<!-- %logger 表示输出当前的logger名称,
{36}表示限定字符最多为36个,如果logger名称超出了长度,会自动缩减字符 -->
<!-- 比如我们经常这么写 Logger logger = LoggerFactory.getLogger(Slf4jTest.class);
那么logger的名称就是Slf4jTest的全路径名xxx.xxx.Slf4jTest -->
<!-- %message简写%msg或%m 表示输出具体的日志消息,
如logger.info("hello world")中的hello world -->
<!-- %n 换行 -->
<!-- 其他如[]或-都是日志美化加的普通文本,使用过程中按需定义格式,并不是都需要用到 -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}-[%line] -- %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 这里配置的是一个文件的appender -->
<!-- 输出到文件的appender还有另一个类:ch.qos.logback.core.FileAppender,但是不支持日志滚动,一般不怎么用 -->
<!-- 按天生成日志 -->
<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<!-- 指定日志文件路径,log.filePath就是我们上面定义的property -->
<file>${log.filePath}/shop.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 滚动后的日志按日期保存历史 -->
<FileNamePattern>
${log.filePath}/shop.log-%d{yyyy-MM-dd}-%i.log
</FileNamePattern>
<!-- 保存最近 10 天的日志,防止磁盘被占满 -->
<maxHistory>10</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 设置最大日志文件大小 -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%level][%thread]:%logger{50} [%method:%line] %msg%n
</pattern>
</encoder>
</appender>
<!-- root 也是Logger类的一个实例 ,是所有其他Logger实例的parent,这个parent不是继承,而是组合关系,
Logger类里面有个属性就是parent,对应也是个Logger实例-->
<!-- 我们通过LoggerFactory.getLogger(Slf4jTest.class)获取logger时,
就是通过类全路径名称去找logger,如test.Slf4jTest -->
<!-- 如果找不到对应的logger,系统会自动创建一个同名logger,其parent最终指向root-->
<!-- level 表示当前logger只打印info及以上的日志信息 -->
<!-- 日志处理级别 -->
<root level="info">
<!-- 配置append引用,ref指向上面配置的appender name,表示当前logger需要向哪里写日志,
这里配置两个,则既会控制台输出,也会写到文件,如果不配,则不会打印任何日志 -->
<appender-ref ref="console"/>
<appender-ref ref="logFile" />
</root>
<!-- 自定义的logger,name 是根据包名规则来匹配的,
如下面的com.test,会匹配到com.test,也会匹配到com.test.xxx.xxx.xxx-->
<!-- additivity 表示是否需要把root里配置的appender搬进来,
如果为true,root里有console,logger里也有,会导致日志打印两次 -->
<!-- 输出指定包文件的日志 -->
<logger name="com.fish" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="logFile" />
</logger>
<!-- Spring 日志级别控制 -->
<logger name="org.springframework" level="warn" />
</configuration>
logback配置文件(详细说明)
最新推荐文章于 2024-04-30 13:36:58 发布