<?xml version="1.0" encoding="UTF-8"?>
<!--
##########当存在spring-boot-starter-web 这儿依赖包,就不需要再添加有关日志的依赖包了。
可复用的springboot日志配置文件,,, 自定义日志输出格式,输出位置, 保存天数等。
日志配置文件有默认的 几个命名: logback.xml ,logback-spring.xml ,... ,常用的logback-spring.xml 。
logback-spring.xml : 支持配置多环境(生产,开发)日志。
当然也可以自定义文件名称:logger-config.xml , 但必须在application.yml 文件中说明 logging.config=classpath:logger-config.xml
下面对个节点属性进行说明:
1.根节点 configuration
属性:scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值 false
2.property 定义变量。 通过${} 取值
3.appender 格式化日志输出 。
name:名称, class :指定输出策略,常用控制台输出,文件输出两种
encoder: 指定具体的输出格式。
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n
时间 。。。。。。。。。。。。。进程。。。。。等级。。。。输出位置。输出信息。换位符
filter :过滤器,过来输出日志级别。
4.rollingPolicy :定义文件输出的回滚策略, 按日期分目录,按文件大小分目录,回滚。
5.logger: 指定某个具体的类或者包,的日志输出。
6.root : 指定最基本的日志输出级别。 必须存在的节点。
-->
<configuration scan="true" debug="false">
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<property name="log_dir" value="../mlogs"/>
<property name="maxHistory" value="30"/>
<!-- ConsoleAppender 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 对日志进行格式化 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
</encoder>
</appender>
<!--各种级别日志输出, 通过过滤器过滤其他级别的日志,各级别日志分别保存-->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<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>${log_dir}/%d{yyyy-MM-dd}/error-log.log
</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<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">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn-log.log
</fileNamePattern>
<!-- 日志最大的历史 30天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录INFO级别的日志 -->
<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">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<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">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy> -->
<!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy> -->
<appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<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>${log_dir}/%d{yyyy-MM-dd}/trace-log.log
</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!--···················································································-->
<!--给 logger 节点 对应 用的-->
<appender name="loggerController" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/loggerController.log
</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!--非必须节点。 用来设置某个具体的类或者包 的日志,比如你想要吧某个controller的日志单独拿出来,可以用这个节点设置
level :指定这个包/类 要输出级别, additivity: 是否向上传递给root, appender-ref: 识别appender
-->
<logger name="org.spring.controller" level="debug" additivity="ture">
<appender-ref ref="loggerController"/>
</logger>
<!--必须的节点,指定最基本的输出级别level,识别appender,输出到对应的文件位置-->
<root level="info">
<!--<appender-ref ref="STDOUT"/>-->
<appender-ref ref="ERROR"/>
<appender-ref ref="INFO"/>
<appender-ref ref="WARN"/>
<appender-ref ref="DEBUG"/>
<appender-ref ref="TRACE"/>
</root>
<!--多环境日志输出, 这个是使用logback-spring.xml命名时可以用的-->
<!--测试+开发环境的 日志输出-->
<!--<springProfile name="dev,test">-->
<!--<logger name="org.spring.controller" level="debug" additivity="ture">-->
<!--<appender-ref ref="loggerController"/>-->
<!--</logger>-->
<!--</springProfile>-->
<!--<!–生产环境–>-->
<!--<springProfile name="pro">-->
<!--<logger name="org.spring.controller" level="info" additivity="false">-->
<!--<appender-ref ref="loggerController"/>-->
<!--</logger>-->
<!--</springProfile>-->
</configuration>