背景
Java 生态下的日志库太多,配置也不同,大多数情况下会使用 SLF4j (又引入了一个库)来抽象日志接口。在使用 Log4j2 后,发现可以不使用 SLF4j 了,并且配置变得更简单,可以使用 lombok 的 log4j2 注解等。
需要搞清楚
- 如何设置哪些日志要记录下来
- 日志记录到哪里去
LEVEL 日志级别:
- 内置(有 Fatal):All < Trace < Debug < Info < Warn < Error < Fatal < OFF
- 还可以自定义: https://logging.apache.org/log4j/2.0/manual/customloglevels.html
Appender: 日志输出的目的地
内置的目的地有:
- console,
- files(FIle/RollingFile),
- remote socket servers,
- Apache Flume,
- JMS,
- remote UNIX Syslog daemons,
- various database APIs
- …
Appender 在接受到日志以后,可以通过级别过滤选择记录日志,具体配置: https://logging.apache.org/log4j/2.0/manual/appenders.html
Logger 负责决定哪些日志要记录和发配日志
哪些需要记日志,设置什么级别,并且配置日志输出到哪些个 Appender 中去都在 Logger 中配置。Logger 有类似继承的关系,名为 Root 的的 Logger
继承关系由 Logger 的名称推断出来,名称可以认为是 Logger 树的前序遍历打印的节点路径。
Logger 定义
Logger Name | 将会记录日志的 Logger |
---|---|
Root | Root |
X | Root, X |
X.Y | Root, X, Y |
X.Z | Root, X,Z |
M | Root, M |
Filter 日志过滤器
DENY,ACCEPT,NEUTRAL 三个选项,所有进入当前 Appender 的所有日志,Filter 可以设置来选择日志是否要记录