From 59aed08fb40406e0910bb57404ab3fa04e6012b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B3=95=E7=84=B6?= Date: Fri, 11 Nov 2022 17:35:42 +0800 Subject: [PATCH] logback --- Java三方库/logback.md | 427 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 Java三方库/logback.md diff --git a/Java三方库/logback.md b/Java三方库/logback.md new file mode 100644 index 00000000..5db64e68 --- /dev/null +++ b/Java三方库/logback.md @@ -0,0 +1,427 @@ + +## 1 简介 + +### 日志组件 + +logback是一个开源的日志组件,是log4j的作者开发的用来替代log4j的。logback由三个部分组成,logback-core, logback-classic, logback-access。 + +* 其中logback-core是其他两个模块的基础。 +* logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API,使我们可以在其他日志系统,如log4j和JDK14 Logging中进行转换 +* logback-access:访问模块和Servlet容器集成,提供通过Http来访问日志的功能 + + +### 日志级别 +级别包括:TRACE < DEBUG < INFO < WARN < ERROR + +### 配置流程 + +1. 添加maven依赖 +2. 查找配置文件。logback-spring.xml、logback.xml、BasicConfigurator。 +3. 加载配置内容。configuration + +```xml + + + +``` + +### maven依赖 + +```xml + + + org.slf4j + slf4j-api + 1.7.21 + + + + ch.qos.logback + logback-core + 1.1.7 + + + ch.qos.logback + logback-classic + 1.1.7 + +``` + + + +## 2 配置内容 + +### configuration +日志配置的根节点 + +``` + +``` + + +### contextName + +的子节点。各个logger都被关联到一个loggerContext中,loggerContext负责制造logger,也负责以树结构排列个logger。 + + + +``` +atguiguSrb +``` +### property + +的子节点,用来定义变量。 + + 有两个属性,name和value:name的值是变量的名称,value是变量的值。 + +通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 + + +```xml + + + + + + + + + + + + + + + + +``` + +### appender +``是``的子节点,是负责写日志的组件.主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、MySQL、PostreSQL、Oracle和其他数据库、JMS和远程UNIX Syslog守护进程等。 + +不同的appender有不同的属性可以配置 + + +### ConsoleAppender +* ``有两个必要属性name和class:name指定appender名称,class指定appender的全限定名 +* ``对日志进行格式化 + * ``定义日志的具体输出格式 + * ``编码方式 + +```xml + + + ${log.path}/log.log + true + + ${CONSOLE_LOG_PATTERN} + ${ENCODING} + + +``` + +输出模式说明 +* 输出模式:%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n +* 输出模式解释:时间日期格式-调用的线程-日志界别-调用对象-日志信息-换行 + +``` +%d{HH:mm:ss.SSS}:日志输出时间(red) +%thread:输出日志的进程名字,这在Web应用以及异步任务处理中很有用 (green) +%-5level:日志级别,并且使用5个字符靠左对齐 (highlight高亮蓝色) +%logger:日志输出类的名字 (boldMagenta粗体洋红色) +%msg:日志消息 (cyan蓝绿色) +%n:平台的换行符 +``` + +### FileAppender + +* ``表示日志文件的位置,如果上级目录不存在会自动创建,没有默认值。\ +* ``默认 true,日志被追加到文件结尾,如果是 false,服务重启后清空现存文件。 +```xml + + + ${log.path}/log.log + true + + ${FILE_LOG_PATTERN} + ${ENCODING} + + +``` + +### RollingFileAppender +表示滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将旧日志备份到其他文件 + +* ``是``的子节点,用来定义滚动策略。 + +* TimeBasedRollingPolicy:最常用的滚动策略,根据时间来制定滚动策略。 + +* ``:包含文件名及转换符, “%d”可以包含指定的时间格式,如:%d{yyyy-MM-dd}。如果直接使用 %d,默认格式是 yyyy-MM-dd。 +* ``:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且``是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。 + +```xml + + + ${log.path}/log-rolling.log + + ${FILE_LOG_PATTERN} + ${ENCODING} + + + + + ${log.path}/info/log-rolling-%d{yyyy-MM-dd}.log + + 15 + + + + +``` + +* 放在``的子节点的位置,基于实践策略的触发滚动策略``设置触发滚动条件:单个文件大于100M时生成新的文件 + +### logger + +``可以是``的子节点,用来设置日志打印级别、指定`` + + +* name:用来指定受此logger约束的某一个包或者具体的某一个. +* level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF。默认继承上级的级别 +* logger日志级别。级别包括:TRACE < DEBUG < INFO < WARN < ERROR,定义于ch.qos.logback.classic.Level类中。如果logger没有被分配级别,name它将从有被分配级别的最近的父类那里继承级别,root logger默认级别是DEBUG。 +* ``可以包含零个或多个``元素,标识这个appender将会添加到这个logger + +```xml + + + + + +``` + +* logger的取得:通过org.slf4j.LoggerFactory的getLogger()方法取得。getLogger(Class obj)方式是通过传入一个类的形式来进行logger对象和类的绑定;getLogger(String name)方式是通过传入一个contextName的形式来指定一个logger,用同一个名字调用该方法获取的永远都是同一个logger对象的引用。 +## 3 配置文件 + +### 配置文件实例 + +```xml + + + + atguiguSrb + + + + + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + ${ENCODING} + + + + + + ${log.path}/log.log + true + + ${FILE_LOG_PATTERN} + ${ENCODING} + + + + + + + ${log.path}/log-rolling.log + + ${FILE_LOG_PATTERN} + ${ENCODING} + + + + + + + ${log.path}/info/log-rolling-%d{yyyy-MM-dd}.%i.log + + 15 + + + 1KB + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +### 配置文件实例 + +```xml + + + + + + + + + + + + + + + + + + + + ${log.pattern} + + + + + + ${log.filePath}/debug.log + + + + + ${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz + + + ${log.maxHistory} + + + ${log.pattern} + + + + + DEBUG + + ACCEPT + + DENY + + + + + + ${log.filePath}/info.log + + + + + ${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz + + + ${log.maxHistory} + + + ${log.pattern} + + + + + INFO + + ACCEPT + + DENY + + + + + + ${log.filePath}/error.log + + + + + ${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz + + + ${log.maxHistory} + + + ${log.pattern} + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + +``` \ No newline at end of file