|
1 | | -# 目录 |
| 1 | +## 目录 |
2 | 2 | * [导读](#导读) |
3 | 3 | * [Log的发展历程](#Log的发展历程) |
4 | | -* [Log4j2介绍](#Log4j2介绍) |
5 | | -* [Log4j2配置详解](#Log4j2配置详解) |
6 | | -* [Log4j2应用](#Log4j2应用) |
| 4 | +* [Log4j2使用](#Log4j2使用) |
| 5 | +* [Log4j2常用配置](#Log4j2常用配置) |
7 | 6 |
|
8 | | -## 导读 |
| 7 | +### 导读 |
9 | 8 | 在日常的面试中,问到日志这块的很少,但是也会问到关于日志的选型和对比,主要考察你平时的总结。我这篇笔记呢主要是从Java中日志的发展历史,到流行的log4j2的常规使用和规范进行一个系统的总结。 |
10 | 9 |
|
11 | | -## Log的发展历程 |
| 10 | +### Log的发展历程 |
12 | 11 | > 历史 |
13 | 12 | 1. JUL (Java Util Logging) 早期的JDK内置的Log。包含Logger,Handler,Formatter三个模块。 |
14 | 13 | 2. Log4j 由于JUL的开发不友好,Log4j推出之后迅速扩展开来。后来Log4j被Apache Foundation收入门下之后,由于理念不合,Log4j的作者Ceki离开了,后来开发了Slf4j和Logback。 |
|
19 | 18 |
|
20 | 19 | > 原生Java日志组件长什么样 |
21 | 20 | Java日志API由以下三个核心组件组成: |
22 | | -* Loggers: Logger负责捕获事件并将其发送给合适的Appender |
23 | | -* Appenders: 也称为Handler,负责将日志事件记录到目标位置。在将日志事件输出之前,Appenders使用Layouts来对事件进行格式化处理 |
24 | | -* Layouts: 也称为Formatters,它负责对日志事件中的数据进行转换和格式化。Layouts决定了数据在一条日志记录中的最终形式。 |
| 21 | +* Loggers: 记录器 Logger负责捕获事件并将其发送给合适的Appender |
| 22 | +* Appenders: 输出目的地 也称为Handler,负责将日志事件记录到目标位置。在将日志事件输出之前,Appenders使用Layouts来对事件进行格式化处理 |
| 23 | +* Layouts: 日志布局 也称为Formatters,它负责对日志事件中的数据进行转换和格式化。Layouts决定了数据在一条日志记录中的最终形式。 |
25 | 24 | 当Logger记录一个事件时,它将事件转发给适当的Appender。然后Appender使用Layout来对日志记录进行格式化,并将其发送给控制台、文件或者其它目标位置。另外,Filters可以让你进一步指定一个Appender是否可以应用在一条特定的日志记录上。在日志配置中,Filters并不是必须的,但可以让你更灵活地控制日志消息的流动。 |
26 | 25 |
|
27 | 26 | > logback与log4j2比较 |
@@ -50,16 +49,50 @@ log4j2和logback各有长处,总体来说,如果对性能要求比较高的 |
50 | 49 | 2. Tinylog是一个小巧的日志框架 https://tinylog.org/v2/ |
51 | 50 | 3. 大佬Ceki的github https://github.com/ceki |
52 | 51 |
|
53 | | -## Log4j2介绍 |
| 52 | +### Log4j2使用 |
| 53 | +> Log4j2的两种配置方式 |
| 54 | +* 通过`ConfigurationFactory`使用编程的方式进行配置 |
| 55 | +* 通过配置文件配置,支持`xml`、`JSON`、`YAML`和`properties`等文件类型 |
54 | 56 |
|
55 | | -## Log4j2介绍 |
| 57 | +> Log4j2的三大组件 |
| 58 | +* Logger 记录器 |
| 59 | +``` |
| 60 | +Loggers节点,常见的有两种:Root和Logger |
| 61 | +Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 |
| 62 | +Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等 |
| 63 | +``` |
| 64 | +* Appender 输出目的地 |
| 65 | +``` |
| 66 | +Appenders节点,常见的有三种子节点:Console, File, RollingFile |
| 67 | +console节点用来定义输出到控制台的Appender |
| 68 | +File节点用来定义输出到指定位置的文件的Appender |
| 69 | +RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender |
| 70 | +``` |
| 71 | +* Layout 日志布局 |
| 72 | +``` |
| 73 | +Layout日志布局参数很多,这里我只罗列常用的 |
| 74 | +<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%l] - %msg%n" /> |
| 75 | +对齐方式,例如 %20c 右对齐, 最小宽度20,无最大宽度,不足20个字符则在数值前面用空格补足,超过20个字符则保留原信息。 |
| 76 | +数据类型 转换字符 输出日志 |
| 77 | +日期 %d{HH:mm:ss.SSS} 11:33:08.440 |
| 78 | +线程名 %t main |
| 79 | +日志级别 %-5level FATAL |
| 80 | +日志名称 %logger{36} org.apache.logging.log4j.Log4j2Test |
| 81 | +日志信息 %msg fatal level log |
| 82 | +换行 %n 日志结束换行 |
| 83 | +``` |
56 | 84 |
|
57 | | -## Log4j2应用 |
| 85 | +### Log4j2常用配置 |
| 86 | +> Log4j2按模块名称来分开日志文件 |
58 | 87 |
|
59 | | -# 参考 |
| 88 | +### 代码示例 |
| 89 | +https://github.com/zhonghuasheng/JAVA/tree/master/springboot/springboot-log4j2 |
| 90 | + |
| 91 | +## 参考 |
60 | 92 | * 为什么Log4j2优于Log4j、Logback https://www.jianshu.com/p/1ec9f5763c5c |
61 | 93 | * log4j2.xml详解 https://www.jianshu.com/p/8ded6531ef76 |
62 | 94 | * log4j2系列 https://www.jianshu.com/nb/36706646 |
63 | 95 | * 论Java日志组件的选择 https://www.jianshu.com/p/85d141365d39 |
64 | 96 | * 2020 年了,Java 日志框架到底哪个性能好?——技术选型篇 https://www.cnblogs.com/xuningfans/p/12196175.html |
65 | | -* Java Log 日志 https://www.jianshu.com/p/ca3d96e64607 |
| 97 | +* Java Log 日志 https://www.jianshu.com/p/ca3d96e64607 |
| 98 | +* Log4j2进阶使用(Pattern Layout详细设置) https://www.jianshu.com/p/37ef7bc6d6eb |
0 commit comments