摘要:
Logback 旨在作为流行的 log4j 项目的后继者。它是由 log4j 的创始人 CekiGülcü设计的。它以在设计工业强度测井系统方面获得的十年经验为基础。与所有现有的日志记录系统相比,最终的产品(即 logback)速度更快,占用空间更小,有时间隔很大。同样重要的是,logback 提供了其他日志系统中缺少的独特而实用的功能
使用 logback-test.xml 或 logback.xml 进行自动配置
例:
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 属性根据自身需求设置,可以是系统变量,配置参数(需要引入配置文件),亦可以如下 -->
<property name="APP_NAME" value="你的应用名" />
<!--应用业务日志统一打印到 /root/${APP_NAME}/logs下面 -->
<property name="LOG_PATH" value="/home/admin/${APP_NAME}/logs" />
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/application.log</file>
<encoder>
<pattern>
%highlight(%date{yyyy-MM-dd HH:mm:ss.SSS}) %yellow(%-5level) %green(%logger{36}).%gray(%M)-%boldMagenta(%line) - %msg%n
</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="APPLICATION" />
</root>
</configuration>
什么是 Appender?
Logback 将编写日志记录事件的任务委托给称为附加程序的组件。Appender必须实现ch.qos.logback.core.Appender接口。该接口的主要方法总结如下:
package ch.qos.logback.core; import ch.qos.logback.core.spi.ContextAware; import ch.qos.logback.core.spi.FilterAttachable; import ch.qos.logback.core.spi.LifeCycle; public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachable { public String getName(); public void setName(String name); void doAppend(E event); }
appender语法结构:
1、属性:appender标签中包含两个强制需要的属性:name、class
①name:为这个appender起一个唯一标识的名称。与appender-ref中的值相对应。以引用appender。
②class:一个Appender类实例的完整类名称。
2、appender标签中可以包含0个或者1个【layout】标签。0个或者多个【encoder】标签,0个或者多个 【filter】标签。
3、除了上面3个公共标签之外,还可以包含任意多个与appender的class属性所在的类中的对应的属性标 签。准确的说是setXXX()的XXX标签。他就是利用了Java的反射机制
Appender 最终负责输出日志记录事件
但是Appender 可以将事件的实际格式委托给Layout
或Encoder
对象。每个布局/编码器都与一个且只有一个附加程序(称为拥有附加程序)相关联。一些追加程序具有内置或固定的事件格式。因此,它们不需要布局/编码器。例如,SocketAppender
只是将记录事件串行化,然后再通过网络传输它们
解读:
<encoder> <pattern> %highlight(%date{yyyy-MM-dd HH:mm:ss.SSS}) %yellow(%-5level) %green(%logger{36}).%gray(%M)-%boldMagenta(%line) - %msg%n </pattern> <charset>UTF-8</charset> </encoder>
pattern:设置日志输出格式+样式
语法:%样式()
例子:
%highlight(%date{yyyy-MM-dd HH:mm:ss.SSS}) 作用:高亮 根据日志级别不同
%yellow(%-5level) 作用:黄色显示日志级别
颜色字符编码 加粗颜色字符编码
%black 黑色
%red 红色
%green 绿色
%yellow 黄色
%blue 蓝色
%magenta 洋红色
%cyan 青色
%white 白色
%gray 灰色
%boldRed
%boldGreen
%boldYellow
%boldBlue
%boldMagenta
%boldCyan
%boldWhite
%highlight 高亮色
设置日志输出级别以及使用对应的 Appender
<root level="INFO">
<!-- <appender-ref ref="CONSOLE" />-->
<appender-ref ref="APPLICATION" />
</root>
日志输出效果
常见问题
问题1: 分割日志文件不正确,超过限定大小或过期后不会清理日志文件 原因:日志文件存放路径变量无法引用到(环境变量,配置文件)