logback-spring.xml配置详解
日志配置文件,官方文档建议使用-spring 命令格式的配置,日志框架不直接加载,由SpringBoot解析日志配置,如:logback-spring.xml。如果直接定义为logback.xml 将直接被日志框架识别。下面详细解释下logback-spring.xml中属性的具体作用:<configuration><contextListener class="com.ofpa
·
日志配置文件,官方文档建议使用-spring 命令格式的配置,日志框架不直接加载,由SpringBoot解析日志配置,如:logback-spring.xml。如果直接定义为logback.xml 将直接被日志框架识别。下面详细解释下logback-spring.xml中属性的具体作用:
<configuration>
<contextListener class="com.ofpay.logback.TtlMdcListener"/>
<!-- 直接本配置文件配置,name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。java.io.tmpdir的值从虚拟机参数中获取:-Djava.io.tmpdir -->
<property name="LOG_PATH"
value="${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}"/>
<!-- properties配置文件定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径。source配置文件内参数key -->
<springProperty scope="context" name="APP_NAME"
source="spring.application.name" defaultValue="spring-boot-fusion"/>
<!-- %d{yyyy-MM-dd HH:mm:ss.SSS}——日志输出时间; $PID——进程号; %level——日志级别; ${LOG_LEVEL_PATTERN:-%5p}:用于呈现日志级别的格式(默认%5p);%t--输出日志的线程名;%-40.40logger{39}——其中的“-”表示左对齐,“{39}”表示logger名字最长39个字符,否则按照句点分割; %msg——日志消息; %n——平台的换行符; -->
<property name="LOG_PATTERN"
value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}|${PID:- }|%level|${LOG_LEVEL_PATTERN:-%5p}|%t|%-40.40logger{39}: %msg%n"/>
<!-- 标准输出模式 console-->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 对日志进行格式化 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 输出模式 file,滚动记录文件,先将日志文件指定到文件,当符合某个条件时,将日志记录到其他文件 -->
<appender name="fileDebug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。-->
<file>${LOG_PATH}/${APP_NAME}-debug.log</file>
<!--滚动策略 基于时间的分包策略,SizeAndTimeBasedRollingPolicy:按日期,大小记录日志 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- yyyy-MM-dd 时间策略则为一天一个文件,%d{yyyy-MM-dd-HH}指定日期格式,%i指定索引 -->
<FileNamePattern>${LOG_PATH}/${APP_NAME}-debug.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
<!--日志文件保留小时数,此处的时间单位是从fileNamePattern的yyyy-MM-dd_HH中提取的,yyyy-MM-dd_HH精确到小时,因此单位就是小时-->
<MaxHistory>48</MaxHistory>
<maxFileSize>1GB</maxFileSize>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<!-- layout 负责把事件转换成字符串,格式化的日志信息的输出 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
<!-- 过滤策略:
LevelFilter : 只打印level标签设置的日志级别
ThresholdFilter:打印大于等于level标签设置的级别,小的舍弃
当前appender=fileDebug只记录debug级别
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--设置过滤级别-->
<level>DEBUG</level>
<!--用于配置符合过滤条件的操作-->
<onMatch>ACCEPT</onMatch>
<!--用于配置不符合过滤条件的操作-->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 输出模式 file,滚动记录文件,先将日志文件指定到文件,当符合某个条件时,将日志记录到其他文件 -->
<appender name="fileInfo" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。-->
<file>${LOG_PATH}/${APP_NAME}-info.log</file>
<!--滚动策略 基于时间的分包策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- yyyy-MM-dd-HH 时间策略则为一小时一个文件 -->
<FileNamePattern>${LOG_PATH}/${APP_NAME}-info.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
<!--日志文件保留小时数-->
<MaxHistory>48</MaxHistory>
<!--单个日志文件最大1GB-->
<maxFileSize>1GB</maxFileSize>
<!--日志文件总大小超过20GB会删除旧的日志文件-->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<!-- layout 负责把事件转换成字符串,格式化的日志信息的输出 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
<!--级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--设置过滤级别-->
<level>INFO</level>
<!--用于配置符合过滤条件的操作-->
<onMatch>ACCEPT</onMatch>
<!--用于配置不符合过滤条件的操作-->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="fileWarn" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${APP_NAME}-warn.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- yyyy-MM-dd-HH 时间策略则为一小时一个文件 -->
<FileNamePattern>${LOG_PATH}/${APP_NAME}-warn.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
<!--日志文件保留小时数-->
<MaxHistory>48</MaxHistory>
<maxFileSize>1GB</maxFileSize>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="fileError" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${APP_NAME}-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- yyyy-MM-dd-HH 时间策略则为一小时一个文件 -->
<FileNamePattern>${LOG_PATH}/${APP_NAME}-error.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
<!--日志文件保留小时数-->
<MaxHistory>48</MaxHistory>
<maxFileSize>1GB</maxFileSize>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="fileAccess" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${APP_NAME}-access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- yyyy-MM-dd 时间策略则为一天一个文件 -->
<FileNamePattern>${LOG_PATH}/${APP_NAME}-access.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
<!--日志文件保留小时数-->
<MaxHistory>48</MaxHistory>
<!-- 单个日志文件最大 1GB,总日志量不能超过totalSizeCap-->
<maxFileSize>1GB</maxFileSize>
<!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 -->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
</appender>
<appender name="fileSQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${APP_NAME}-sql.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- yyyy-MM-dd-HH 时间策略则为一小时一个文件 -->
<FileNamePattern>${LOG_PATH}/${APP_NAME}-sql.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
<MaxHistory>48</MaxHistory>
<maxFileSize>1GB</maxFileSize>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_PATTERN}</pattern>
</layout>
</appender>
<appender name="asyncDebug" class="ch.qos.logback.classic.AsyncAppender">
<!-- 默认情况下,当BlockingQueue还有20%容量,
他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。
为了保持所有的events,设置该值为0。-->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>1024</queueSize>
<!--如果设置了neverBlock=true则写日志队列时候会调用ArrayBlockingQueue对的offer方法而不是put,而offer是非阻塞的-->
<neverBlock>true</neverBlock>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="fileDebug"/>
</appender>
<appender name="asyncInfo" class="ch.qos.logback.classic.AsyncAppender">
<!-- 默认情况下,当BlockingQueue还有20%容量,
他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。
为了保持所有的events,设置该值为0。-->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>1024</queueSize>
<!--如果设置了neverBlock=true则写日志队列时候会调用ArrayBlockingQueue对的offer方法而不是put,而offer是非阻塞的-->
<neverBlock>true</neverBlock>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="fileInfo"/>
</appender>
<appender name="asyncWarn" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<neverBlock>true</neverBlock>
<appender-ref ref="fileWarn"/>
</appender>
<appender name="asyncError" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<neverBlock>true</neverBlock>
<appender-ref ref="fileError"/>
</appender>
<appender name="asyncAccess" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<neverBlock>true</neverBlock>
<appender-ref ref="fileAccess"/>
</appender>
<appender name="asyncSQL" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<neverBlock>true</neverBlock>
<appender-ref ref="fileSQL"/>
</appender>
<!-- request 日志
additivity: 是否向上级logger传递打印信息。默认是true。
同<logger>一样,可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。
-->
<logger name="com.poizon.fusion.webmvc.logging.AccessLoggingFilter" level="info" additivity="false">
<appender-ref ref="asyncAccess"/>
</logger>
<!--
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender>。<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。
-->
<logger name="springfox.documentation" level="OFF"/>
<!-- springProfile多环境日志输出,根据不同环境(local:本地环境,prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,读取spring.profiles.active的值-->
<springProfile name="local">
<root>
<level value="DEBUG"/>
<appender-ref ref="asyncDebug"/>
</root>
<root>
<level value="INFO"/>
<appender-ref ref="stdout"/>
<appender-ref ref="asyncInfo"/>
<appender-ref ref="asyncWarn"/>
<appender-ref ref="asyncError"/>
</root>
</springProfile>
</configuration>
更多推荐
已为社区贡献1条内容
所有评论(0)