说明
需求点:
项目搭建脚手架几乎必备
一些业务数据或者监控数据需要单独输出到文件
配置案例
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- springProperty 获取配置文件变量 -->
<springProperty scope="context" name="logPath" source="log.path" />
<springProperty scope="context" name="defaultLevel" source="log.defaultLevel" />
<springProperty scope="context" name="sqlLevel" source="log.sqlLevel" />
<springProperty scope="context" name="project" source="spring.application.name" />
<!-- property 设置变量,下面有用到。含义是日志保存路径-->
<!-- <property name="logPath" value="F:/log" />-->
<!-- <property name="project" value="springboot-log-demo" />-->
<property name="pattern" value="%d{HH:mm:ss.SSS} [%thread] [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %-5level %logger{0}.%M[%L]- %msg%n" />
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 级别过滤,注意: 这里配置的优先级别会覆盖下面的root或者logger的配置级别 -->
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!-- <level>info</level>-->
<!-- </filter>-->
<!--日志输出格式-->
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- info日志文件 -->
<appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 级别过滤 ThresholdFilter(注意不同过滤器的区别) -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
<!-- <onMatch>ACCEPT</onMatch>-->
<!-- <onMismatch>DENY</onMismatch>-->
</filter>
<!--日志名,用到了上面配置的路径-->
<file>${logPath}/current/${project}.log</file>
<!--根据yyyy-MM-dd所以是每天新建文件,也可以设置其它格式,如每月或每分-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/history/${project}.log.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--只保留最近?天的日志(上面是yyyy-MM-dd,则对应单位是天)-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- error日志文件 -->
<appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 级别过滤 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
<!-- 注意:ThresholdFilter的配下面会报错,LevelFilter的不会 -->
<!-- <onMatch>ACCEPT</onMatch>-->
<!-- <onMismatch>DENY</onMismatch>-->
</filter>
<!--日志名,用到了上面配置的路径-->
<file>${logPath}/current/${project}_error.log</file>
<!--根据yyyy-MM-dd所以是每天新建文件,也可以设置其它格式,如每月或每分-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/history/${project}_error.log.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--只保留最近?天的日志(上面是yyyy-MM-dd,则对应单位是天)-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--单独日志文件,自定义log名称 -->
<appender name="prometheus_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定日志文件的名称 -->
<file>${logPath}/prometheus/current/${project}_prometheus.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/prometheus/history/${project}_prometheus-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<MaxHistory>14</MaxHistory>
<!-- 配置SizeAndTimeBasedFNATP,fileNamePattern 需要有%i -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 日志输出格式: -->
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}]%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 设置默认日志隔离级别(全局配置),appender的filter没配置采用该默认过滤级别 -->
<!-- 上面的appender得加到下面才会生效 -->
<root level="${defaultLevel}">
<appender-ref ref="console"/>
<appender-ref ref="info_file" />
<appender-ref ref="error_file" />
</root>
<!-- 单独输出,name需要匹配LoggerFactory -->
<logger name="promtheusLog" level="info" additivity="false">
<appender-ref ref="prometheus_file"/>
</logger>
<!-- sql日志级别配置 -->
<logger name="com.chengjiu.cjlogdemo.mapper" level="${sqlLevel}" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="info_file" />
<appender-ref ref="error_file" />
</logger>
<!-- local环境只对console appender有效 -->
<!-- <springProfile name="local">-->
<!-- <root level="DEBUG">-->
<!-- <appender-ref ref="console"/>-->
<!-- </root>-->
<!-- </springProfile>-->
<!-- <!–设置具体包的隔离级别–>-->
<!-- <logger name="cn.theUnit4.Mapper" level="debug"/>-->
</configuration>
日志案例
image.png
image.png
可能会遇到的一些坑
image.png
image.png