1. logback-spring配置

1. 根节点:configuration
标签是根节点,包含以下属性:
- scan: 当此属性为true时,配置文件发生改变,将会被重新加载,默认值true
- scanPeriod:检测配置文件是否有修改时间间隔,如果没有自定时间单位,默认是毫秒(ms)。当scan为true,此scan为true,此时生效,默认时间间隔1分钟。
- debug:此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态,默认值false
<?xml version="1.0" encoding="UTF-8"?><configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 其他配置 --></configuration>
2. property 和 springProperty
: 可以直接设置 设置名为logFile的变量,后续则可以直接使用${logFile} 方式引用到该值 “logs/mutest”
:配置成yml文件中的内容 同样使用${logFile},但是,值是采用source文件指定的。 log: file: logs/mutest
3. root
root节点,为必选节点。用来指定最基础的日志输出级别,并指定
… …
4. appender
节点是非常关键的节点,负责格式化一个日志输出节点(也就是描述日志存储类型、位置、滚动规则等属性)。感觉: appender类似是一个日志模板,而logger则是日志的输出者,使用某个appender模板来写日志。 appender有三种类型: ConsoleAppender(控制台日志)、FileAppender(文件日志)、RollingFileAppender(滚动文件日志)。
4.1 ConsoleAppender
ConsoleAppender作用是将日志输出到控制台,一般在本地调试的时候使用,配置非常简单。一个典型的ConsoleAppender,有两大属性:
a. name: appender节点的名称,后文中被logger节点引用。在一个logback配置文件中不能重复。
b. class:使用何种日志输出策略,分别是ConsoleAppender(控制台日志)、FileAppender(文件日志)、RollingFilAppender
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d [%thread] %-5level %logger{50} -[%file:%line]- %msg%n</pattern><charset>UTF-8</charset></encoder></appender>
4.2 FileAppender
FileAppender用来把日志添加到文件。例如:
<appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>testFile.log</file><append>true</append><encoder><pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern></encoder></appender>
跟ConsoleAppender对比,多了一些子节点:
:被写入文件名,可相当目录,也可是绝对目录,如果上级目录不存在就会自动创建,没有默认值 :如果为true,日志被追加到文件结尾;如果是false,清空现存文件。默认为true :对记录时间进行格式化。 :如果是true,日志会被安全写入文件,即使其他的FileAppender也在向此文件写入操作,效率低。所以默认是false :日志的输出格式
<!-- lOGGER PATTERN 根据个人喜好选择匹配 --><property name="logPattern"value="[ %-5level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] %logger{15} [%line]- %msg%n"/>
- %date:表示日期
- %thread:表示线程名
- %-5level:表示级别从左显示5个字符宽度
- %logger{15}:表示logger名字最长是15个字符
- %file-%line: 表示 文件及行数
- %msg:表示日志消息
- %n: 换行符
4.3 RollingFileAppender
RollingFileAppender 用于滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。一个典型的RollingFileAppender节点:
<configuration><!--直接定义属性--><property name="logFile" value="logs/mutest"/><property name="maxFileSize" value="30MB"/><appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志文件存储路径,来自property设置--><file>${logFile}.log</file><encoder><pattern>%d [%thread] %-5level -[%file:%line]- %msg%n</pattern><charset>UTF-8</charset></encoder><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--每天生成一个新的活动日志文件,旧的日志归档,后缀名为2019.08.12这种格式--><fileNamePattern>${logFile}.%d{yyyy-MM-dd}.%i.log</fileNamePattern><!--活动日志文件最大值,超过这个值将产生新日志文件--><maxFileSize>${maxFileSize}</maxFileSize><!--只保留最近30天的日志--><maxHistory>30</maxHistory><!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志--><totalSizeCap>1GB</totalSizeCap></rollingPolicy><!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>error</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender></configuration>
常用的子节点:
:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。
:日志输出拦截器,可自定义拦截也可用系统定义好的拦截器。
:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。
SizeAndTimeBaseRollingPolicy:根据日志文件大小和时间周期作为切割条件,满足任意一个就进行切分。maxFileSize,设置决定当天日志文件大小上限,超过设置上限,同一天将有多个日志文件,
${logFile}.%d{yyyy-MM-dd}.%i imeBasedRollingPolicy:只以时间周期为切分条件,在这种策略下,存档日志名称格式设置为
${logFile}.%d{yyyy-MM-dd}.log 即可。SizeBasedTriggeringPolicy:只以文件大小为切分条件,在这种策略下,
日志滚动的唯一触发条件。 - 滚动策略:
:这是活动文件的大小,SizeAndTimeBasedRollingPolicy策略和SizeBasedTriggeringPolicy策略下必须有。默认值是10MB。超过这个大小,就要生成新的活动文件了。 :可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且 是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删。 :可选节点,表示日志文件总大小超过1GB将删除存档日志文件。
<appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><!--日期 日志等级 线程名 类路径 方法名 行号 打印信息 换行--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{20}.%M\(%F:%L\): %msg%n</pattern></encoder><file>${BASE_PATH}/app.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${BASE_PATH}/%d{yyyy-MM-dd}/app.%i.log</fileNamePattern><maxFileSize>500MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>20GB</totalSizeCap></rollingPolicy></appender><!-- 错误日志的配置 --><appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><Append>true</Append><file>${BASE_PATH}/app-error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${BASE_PATH}/%d{yyyy-MM-dd}/app-error.%i.log</fileNamePattern><maxFileSize>500MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>20GB</totalSizeCap></rollingPolicy><encoder><pattern><![CDATA[[%d{yyyy-MM-dd HH:mm:ss.SSSZ} ] - %X{method} %X{requestURIWithQueryString} [ip=%X{remoteAddr}, ref=%X{referrer}, ua=%X{userAgent}, sid=%X{cookie.JSESSIONID}]%n %-5level %logger{35} - %m%n]]></pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender>
4.5 logger节点
logger节点为可选节点,作用是指明具体的包或类的日志输出级别,以及要使用的
<!-- name 属性表示匹配的logger类型前缀 --><logger name="com.mutest.demo"><level value="INFO" /><!-- 引用的appender,类似于spring的ref --><appender-ref ref="fileLog" /><appender-ref ref="STDOUT" /></logger>
- name:必写属性,指定具体包或类,被指定的包或类中的日志输出将遵从该logger规定配置。
- level:非必写属性,指定日志输出级别,该级别将覆盖root配置的输出级别。
- addtivity:非必写属性,是否向上级loger传递打印信息。默认是true。
additivity的作用在于当前logger是否使用上级logeer(一般是root logger)配置的appender进行输出。
- false:表示只用当前logger的appender-ref。
- true:表示当前logger的appender-ref和rootLogger的appender-ref都有效。
- appender-ref:引用的appender,引用后将实现appender中定义的行为,例如上面示例中引用了fileLog这个appender,那么com.mutest.demo中打印的日志将按fileLog的配置进行记录。一个logger可以有多个引用,互不影响。
2. logback 跟 logback-spring的说明
logback.xml 和 logback-spring.xml 都可以用来配置logback,但是2者的加载顺序是不一样的(logback.xml 由日志框架加载,而 logback-spring.xml 由SpringBoot来加载)。
①logback.xml—->②application.properties—->③logback-spring.xml
3. DEMO
<?xml version="1.0" encoding="UTF-8"?><!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --><!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --><!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --><configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- logback项目名称 --><!-- <property name="appName" value="station"/> --><!-- 由于logback-spring的加载顺序在application.properties之后,所以可以将项目名取properties的配置 --><springProperty name="appName" source="spring.application.name" /><!-- 日志路径--><!--<property name="logPath" value="/usr/local/dsa5200/filedata/logs"/>--><springProperty name="logPath" source="log.filePath" /><!-- 日志级别 DEBUG INFO WARN ERROR --><property name="logLevel" value="INFO"/><!-- 是否向上级loger传递打印信息 --><property name="additivity" value="false"/><!-- 最大保存时间 30天--><property name="maxHistory" value="1"/><!-- 单文件对大容量 --><property name="maxFileSize" value="1KB" /><!-- 日志文件总大小--><property name="totalSizeCap" value="3KB" /><!-- 异步缓冲队列的深度,该值会影响性能.默认值为256 --><property name="queueSize" value="256"/><!-- lOGGER PATTERN 根据个人喜好选择匹配 --><!--日期 日志等级 线程名 类路径 方法名 行号 打印信息 换行--><property name="logPattern" value="[ %-5level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] %logger{16} [%line]- %msg%n"/><!-- 动态日志级别 --><jmxConfigurator/><!-- 控制台的标准输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><charset>UTF-8</charset><pattern>${logPattern}</pattern></encoder></appender><!-- DEBUG 日志记录 --><appender name="FILE_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><file>${logPath}/${appName}_debug.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/debug/${appName}_debug.log.%d{yyyy-MM-dd}.%i.log </fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${logPattern}</pattern></encoder></appender><!-- INFO 级别的日志记录 --><appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><file>${logPath}/${appName}_info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/info/${appName}_info.log.%d{yyyy-MM-dd}.%i.log.zip </fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${logPattern}</pattern></encoder></appender><!-- WARN 级别的日志记录 --><appender name="FILE_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><file>${logPath}/${appName}_warn.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/warn/${appName}_warn.log.%d{yyyy-MM-dd}.%i.log </fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${logPattern}</pattern></encoder></appender><!-- Error 级别的日志记录 --><appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志--><filter class="ch.qos.logback.classic.filter.LevelFilter"><!--设置过滤级别--><level>ERROR</level><!--用于配置符合过滤条件的操作--><onMatch>ACCEPT</onMatch><!--用于配置不符合过滤条件的操作--><onMismatch>DENY</onMismatch></filter><file>${logPath}/${appName}_error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/error/${appName}_error.log.%d{yyyy-MM-dd}.%i.log </fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${logPattern}</pattern></encoder></appender><!-- ASYNC_LOG_DEBUG --><appender name="ASYNC_LOG_DEBUG" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold>20</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>${queueSize}</queueSize><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref="FILE_DEBUG"/></appender><!-- ASYNC_LOG_INFO --><appender name="ASYNC_LOG_INFO" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold>20</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>${queueSize}</queueSize><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref="FILE_INFO"/></appender><!-- ASYNC_LOG_WARN --><appender name="ASYNC_LOG_WARN" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold>20</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>${queueSize}</queueSize><appender-ref ref="FILE_WARN"/></appender><!--ASYNC_LOG_ERROR --><appender name="ASYNC_LOG_ERROR" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold>20</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>${queueSize}</queueSize><appender-ref ref="FILE_ERROR"/></appender><!-- 根据不同功能设置不同的模板 --><appender name="WEBSOCKET_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/websocket/websocket_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.PatternLayout"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>${logPattern}</pattern></layout><charset>UTF-8</charset></encoder></appender><appender name="MQTT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/mq/mqtt_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.PatternLayout"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>${logPattern}</pattern></layout><charset>UTF-8</charset></encoder></appender><appender name="GRPC_PROVIDER_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/grpc/provider/grpc_provider_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.PatternLayout"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>${logPattern}</pattern></layout><charset>UTF-8</charset></encoder></appender><appender name="GRPC_CONSUMER_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- yyyy-MM-dd 时间策略则为一天一个文件 --><fileNamePattern>${logPath}/grpc/consumer/grpc_consumer_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><!-- layout 负责把事件转换成字符串,格式化的日志信息的输出 --><layout class="ch.qos.logback.classic.PatternLayout"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>${logPattern}</pattern></layout><charset>UTF-8</charset></encoder></appender><appender name="QUARTZ_PATROL_TASK" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/quartz/job_run_task_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.PatternLayout"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>${logPattern}</pattern></layout><charset>UTF-8</charset></encoder></appender><appender name="OPERATOR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/operator-log/operator_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.PatternLayout"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>${logPattern}</pattern></layout><charset>UTF-8</charset></encoder></appender><appender name="APP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/app/app_log_%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.PatternLayout"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>${logPattern}</pattern></layout><charset>UTF-8</charset></encoder></appender><!--定时启动任务日志--><logger name="com.qif.patrolstation.stationapp.task.service.StartTaskQuartzJobBean" level="${logLevel}" additivity="${additivity}"><appender-ref ref="QUARTZ_PATROL_TASK"/></logger><logger name="com.qif.patrolstation.stationapp.consumer" level="${logLevel}" additivity="${additivity}"><appender-ref ref="GRPC_CONSUMER_LOG"/></logger><logger name="com.qif.patrolstation.stationapp.provider" level="${logLevel}" additivity="${additivity}"><appender-ref ref="GRPC_PROVIDER_LOG"/></logger><logger name="com.qif.patrolstation.stationapp.mqtt.handle" level="${logLevel}" additivity="${additivity}"><appender-ref ref="MQTT_LOG"/></logger><logger name="com.qif.dsa.log" level="${logLevel}" additivity="false"><appender-ref ref="OPERATOR_LOG"/></logger><logger name="com.mhz.base.quartz " level="${logLevel}" additivity="false"><appender-ref ref="APP_LOG"/></logger><logger name="com.qif.patrolstation.stationapp.record" level="${logLevel}" additivity="false"><appender-ref ref="APP_LOG"/></logger><logger name="com.qif.patrolstation.stationapp.report" level="${logLevel}" additivity="false"><appender-ref ref="APP_LOG"/></logger><logger name="com.qif.patrolstation.stationapp.linkage" level="${logLevel}" additivity="false"><appender-ref ref="APP_LOG"/></logger><logger name="com.qif.patrolstation.stationapp.task" level="${logLevel}" additivity="false"><appender-ref ref="APP_LOG"/></logger><logger name="org.apache.commons.beanutils" level="error" additivity="false"/><logger name="org.springframework.scheduling.quartz" level="info" additivity="false"/><logger name="org.quartz" level="info" additivity="false" /><!--<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。name:用来指定受此logger约束的某一个包或者具体的某一个类。level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。addtivity:是否向上级logger传递打印信息。默认是true。<logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger--><!--<logger name="org.springframework.web" level="info"/>--><!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>--><!--使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:--><!--root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG可以包含零个或多个元素,标识这个appender将会添加到这个logger。--><!--开发环境:打印控制台--><!--<springProfile name="dev">--><!-- <logger name="com.banuit.questions" level="debug"/> --><!--</springProfile>--><!--生产环境:输出到文件--><!--<springProfile name="pro">--><!--<root level="info">--><!--<appender-ref ref="CONSOLE" />--><!--<appender-ref ref="DEBUG_FILE" />--><!--<appender-ref ref="INFO_FILE" />--><!--<appender-ref ref="ERROR_FILE" />--><!--<appender-ref ref="WARN_FILE" />--><!--</root>--><!--</springProfile>--><!--docker日志对接的是控制台,所以没必要区分环境,如果是传统的war包外部部署,需要区分环境,配合springProfile使用即可--><root level="${logLevel}"><!-- 控制台 --><appender-ref ref="STDOUT"/><appender-ref ref="ASYNC_LOG_DEBUG"/><appender-ref ref="ASYNC_LOG_INFO"/><appender-ref ref="ASYNC_LOG_WARN"/><appender-ref ref="ASYNC_LOG_ERROR"/></root></configuration>
<!-- 配置文件加载顺序: logback.xml > application.yml > logback-spring.xml --><?xml version="1.0" encoding="UTF-8"?><configuration><!-- https://github.com/spring-projects/spring-boot/blob/v1.5.13.RELEASE/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml --><include resource="org/springframework/boot/logging/logback/defaults.xml"/><!-- logback项目名称 --><!-- <property name="appName" value="station"/> --><!-- 由于logback-spring的加载顺序在application.properties之后,所以可以将项目名取properties的配置 --><springProperty name="APP_NAME" source="spring.application.name" /><!-- 日志路径--><springProperty name="LOG_PATH" source="logging.filePath" /><!-- 日志级别 DEBUG INFO WARN ERROR --><property name="logLevel" value="INFO"/><!-- 是否向上级logger传递打印信息 --><property name="additivity" value="false"/><!-- 最大保存时间 30天--><property name="maxHistory" value="1"/><!-- 单文件对大容量 --><property name="maxFileSize" value="1KB" /><!-- 日志文件总大小--><property name="totalSizeCap" value="3KB" /><!-- lOGGER PATTERN 根据个人喜好选择匹配 --><!--日期 日志等级 线程名 类路径 方法名 行号 打印信息 换行--><property name="LOG_PATTERN" value="[%date{yyyy-MM-dd HH:mm:ss.SSS} [ %level] [traceId:%X{EAGLEEYE_TRACE_ID}] [%class:%line] - %m %n]"/><!--应用的日志模板--><appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/application_logs.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/app/${APP_NAME}_app.%d{yyyy-MM-dd}.%i.log </fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- 控制台输出格式 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>"[ %-5level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] %logger{16} [%line]- %msg%n"</pattern><charset>utf8</charset></encoder></appender><!-- 通用错误日志 --><appender name="COMMON_ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${LOG_PATH}/common_error.log</File><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.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${LOG_PATH}/saved_error/${APP_NAME}_common_error.%d{yyyy-MM-dd}.%i.log</FileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- 异常日志 --><appender name="COMMON_EXCEPTION_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${LOG_PATH}/common_exception.log</File><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${LOG_PATH}/common_exception_saved/${APP_NAME}_common_exception.%d{yyyy-MM-dd}.log</FileNamePattern><maxHistory>5</maxHistory></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!--业务相关日志--><appender name="COMMON_BIZ_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/common-biz.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/common_biz_saved/${APP_NAME}_biz.%d{yyyy-MM-dd}.%i.log </fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- EMQ相关的日志--><appender name="MQTT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${logPath}/mqtt_log.log</File><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/mq/${APP_NAME}_mqtt_%d{yyyy-MM-dd}.%i.log </fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- TCP 协议相关--><appender name="TCP_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${LOG_PATH}/tcp_biz.log</File><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${LOG_PATH}/tcp_saved/${APP_NAME}_tcp_biz.%d{yyyy-MM-dd}.%i.log</FileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder></appender><!-- GRPC生产者 --><appender name="GRPC_PROVIDER_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${logPath}/grpc/provider.log</File><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${logPath}/grpc/provider/${APP_NAME}_grpc_provider.%d{yyyy-MM-dd}.%i.log </fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${logPattern}</pattern><charset>UTF-8</charset></encoder></appender><!-- GRPC消费者 --><appender name="GRPC_CONSUMER_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${logPath}/grpc/consumer.log</File><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- yyyy-MM-dd 时间策略则为一天一个文件 --><fileNamePattern>${logPath}/grpc/consumer/${APP_NAME}_grpc_consumer.%d{yyyy-MM-dd}.%i.log </fileNamePattern><!-- 单个日志文件最大量,总日志量不能超过totalSizeCap--><maxFileSize>${maxFileSize}</maxFileSize><!--日志文件保留天数--><maxHistory>${maxHistory}</maxHistory><!-- 用来指定日志文件的上限大小,如果到了设置的值,就会删除旧的日志 --><totalSizeCap>${totalSizeCap}</totalSizeCap></rollingPolicy><encoder><pattern>${logPattern}</pattern><charset>UTF-8</charset></encoder></appender><!-- 此logger约束,将EXCEPTION的日志输出到COMMON-EXCEPTION-APPENDER,错误日志输出到COMMON-ERROR-APPENDER --><logger name="EXCEPTION" level="${logLevel}" additivity="${additivity}"><appender-ref ref="COMMON_EXCEPTION_APPENDER"/><appender-ref ref="COMMON_ERROR_APPENDER"/></logger><logger name="com.qif.patrolstation.stationapp.mqtt.handle" level="${logLevel}" additivity="${additivity}"><appender-ref ref="MQTT_APPENDER"/></logger><logger name="com.qif.patrolstation.stationapp.consumer" level="${logLevel}" additivity="${additivity}"><appender-ref ref="GRPC_CONSUMER_APPENDER"/></logger><logger name="com.qif.patrolstation.stationapp.provider" level="${logLevel}" additivity="${additivity}"><appender-ref ref="GRPC_PROVIDER_APPENDER"/></logger><logger name="com.mhz.base.quartz " level="info" additivity="true"><appender-ref ref="COMMON_BIZ_APPENDER"/></logger><root level="info"><appender-ref ref="CONSOLE"/><appender-ref ref="COMMON_BIZ_APPENDER"/><appender-ref ref="COMMON_EXCEPTION_APPENDER"/><appender-ref ref="COMMON_ERROR_APPENDER"/></root></configuration>
参考文档:
