因为 spingboot 已经默认集成了 logback, 所以在 springboot 项目中不用添加额外的关于 logback 的依赖.
以下是 spingboot 项目中 logback 的初始化步骤:
logback 会在 resources 下寻找名为 logback-test.xml 的文件.
如果没有找到, logback 会继续寻找名为 logback.groovy 的文件.
如果没有找到, logback 会继续寻找名为 logback.xml 的文件.
如果没有找到, 将会通过 JDK 提供的 ServiceLoader 工具在类路径下寻找文件 META-INFO/services/ch.qos.logback.classic.spi.Configurator, 该文件的内容为实现了 Configurator 接口的实现类的全限定类名.
如果以上都没有成功, logback 会通过 BasicConfigurator 为自己进行配置, 并且日志将会全部在控制台打印出来.
最后一步的目的是为了保证在所有的配置文件都没有被找到的情况下, 提供一个默认的 (但是是非常基础的) 配置.
如果你使用的是 maven, 你可以在 src/main/resources 下新建 logback-test.xml. 所以你可以在测试环境中给配置文件命名为 logback-test.xml, 在生产环境中命名为 logback.xml.
1. 添加配置文件 logback.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration debug="false">
- <!--
- %p: 输出优先级, 即 DEBUG,INFO,WARN,ERROR,FATAL
- %r: 输出自应用启动到输出该日志讯息所耗费的毫秒数
- %t: 输出产生该日志事件的线程名
- %f: 输出日志讯息所属的类别的类别名
- %c: 输出日志讯息所属的类的全名
- %d: 输出日志时间点的日期或时间, 指定格式的方式: %d{yyyy-MM-dd HH:mm:ss}
- %l: 输出日志事件的发生位置, 即输出日志讯息的语句在他所在类别的第几行.
- %m: 输出代码中指定的讯息, 如 log(message)中的 message
- %n: 输出一个换行符号
- -->
- <!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level: 级别从左显示 5 个字符宽度 %msg: 日志消息,%logger{50}包名缩写,%n 是换行符 -->
- <property name="log_pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"/>
- <!-- 定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
- <!-- 日志存储路径 -->
- <springProperty
- scope="context"
- name="defaultLogDir"
- source="qy.log.history.logDir"
- />
- <!-- 日志备份保留时长 -->
- <springProperty
- scope="context"
- name="logMaxHistory"
- source="qy.log.history.maxHistory"
- />
- <!-- 日志大小 -->
- <springProperty
- scope="context"
- name="logMaxSize"
- source="qy.log.history.logMaxSize"
- />
- <property name="logMaxSize" value="200MB"/>
- <!--<!– 控制台日志, 控制台输出 –>-->
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>${log_pattern}</pattern>
- <charset>utf8</charset>
- </encoder>
- </appender>
- <!-- 文件日志, 按照每天生成日志文件 -->
- <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <!-- 正在记录的日志文件的路径及文件名 -->
- <!--<file>${defaultLogDir:-/qy/qy-doctorservice/logs}/log/docser-main.log</file>-->
- <!--TimeBasedRollingPolicy 基于时间来定义轮转策略 -->
- <!--SizeAndTimeBasedRollingPolicy 基于大小以及时间的轮转策略 -->
- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
- <!-- 日志文件输出的路径和文件名 -->
- <!-- 该属性定义了轮转时的属性名. 它的值应该由文件名加上一个 %d 的占位符.%d 应该包含 java.text.SimpleDateFormat 中规定的日期格式.
- 如果省略掉这个日期格式, 那么就默认为 yyyy-MM-dd. 轮转周期是通过 fileNamePattern 推断出来的.
- 注意事项:
- 1. 如果 FileNamePattern 中指定多个 %d, 只能报留一个 %d 作为主要的, 用于推断轮转周期. 其它的 %d 占位符必须通过'aux' 标记为辅助的.
- 2.MaxHistory 用来控制最多保留多少数量的归档文件, 将会异步删除旧的文件.
- 保留日志的量 = 轮转周期 * MaxHistory
- 3.FileNamePattern 中除了 %d 之外还有 %i. 这两个占位符都是强制要求的. 在当前时间还没有到达周期轮转之前, 日志文件达到了 maxFileSize 指定的大小,
- 会进行归档, 递增索引从 0 开始.
- -->
- <!-- 轮询周期: 天 -->
- <!--<FileNamePattern>${defaultLogDir:-/qy/qy-doctorservice/logs}/log/%d{yyyy-MM-dd, aux}/credit.%d.%i.log</FileNamePattern>-->
- <!-- 每天轮转(晚上零点), 自动将归档文件压缩成 GZIP 格式, 减少日志占用空间 -->
- <FileNamePattern>${defaultLogDir:-/qy/qy-doctorservice/logs}/log/%d{yyyy-MM-dd, aux}/credit.%d.%i.zip</FileNamePattern>
- <!-- 日志文件保留轮询周期个数 -->
- <MaxHistory>${logMaxHistory:-15}</MaxHistory>
- <!-- 单个日志文件最大的大小 -->
- <MaxFileSize>${logMaxSize:-100MB}</MaxFileSize>
- <!-- 这个可选属性用来控制所有归档文件总的大小. 当达到这个大小后, 旧的归档文件将会被异步的删除. 使用这个属性时还需要设置 maxHistory 属性.
- 而且, maxHistory 将会被作为第一条件, 该属性作为第二条件.-->
- <!-- 归档文件总的大小 -->
- <totalSizeCap>1GB</totalSizeCap>
- <!--cleanHistoryOnStart=true 时在 appender 启动的时候, 归档文件将会被删除. 默认的值为 false-->
- <cleanHistoryOnStart>true</cleanHistoryOnStart>
- </rollingPolicy>
- <!--<append>: 如果是 true, 日志被追加到文件结尾, 如果是 false, 清空现存文件, 默认是 true.-->
- <append>false</append>
- <encoder>
- <pattern>${log_pattern}</pattern>
- <charset>utf8</charset>
- </encoder>
- </appender>
- <!-- 日志输出级别 -->
- <root level="INFO">
- <appender-ref ref="STDOUT" />
- <appender-ref ref="FILE"/>
- </root>
- </configuration>
实现的主要功能:
1. 日志文件根据日期创建不同的文件夹, 日志的归档单位为一天.
2. 每个归档日期结束后自动压缩当天日志文件, 并根据日期生成新的日志文件夹和日志文件.
3. 单个日志的分割, 日志可根据配置的单个日志文件大小进行分割.
效果图如下:
待改进: 由于项目没有需求要将日志根据日志级别进行分包处理, 所以本文的配置都已 INFO 级别的日志作为处理, 实际项目中如果有这方面的需求小伙伴可以多定义几个 appender 去处理不同级别的日志信息.
三, logback 的常用参数解析
RollingFileAppender 的两种策略:
1.SizeAndTimeBasedRollingPolicy 基于大小以及时间的轮转策略.
有时你希望按时轮转, 但同时又想限制每个日志文件的大小. 特别是如果后期处理工具需要对日志进行大小限制. 为了满足这个需求, logback 配备了 SizeAndTimeBasedRollingPolicy.
注意, TimeBasedRollingPolicy 可以限制归档文件总的大小. 所以如果你想要这个限制, 你可以通过设置 totalSizeCap 来达到这个目的.
2. 是最常用的轮转策略, 它是基于时间来定义轮转策略.
例如按天或者按月. TimeBasedRollingPolicy 既负责轮转的行为, 也负责触发轮转. 实际上, TimeBasedRollingPolicy 同时实现了 RollingPolicy 与 TriggeringPolicy 接口.
是 OutputStreamAppender 的子类, 将日志事件输出到文件中. 通过 file 来指定目标文件. 如果该文件存在, 根据 append 的值, 要么将日志追加到文件中, 要么该文件被截断.
RollingFileAppender 的属性如下所示:
来源: http://www.bubuko.com/infodetail-3348615.html