本系列第 3 篇。理解这三者的关系,Logback 就懂了一大半。
一张图理清关系
应用代码 → Logger(决定"要不要记")→ Appender(决定"记到哪")→ Encoder(决定"记成什么样")
- Logger(记录器):按名字(通常是类的全限定名)组织,负责判断级别、把日志事件转交给 Appender。
- Appender(输出源):日志的"出口"。控制台、文件、数据库、Kafka......一个 Logger 可以挂多个 Appender。
- Encoder / Layout(编码器/布局):把日志事件格式化成最终文本(或 JSON)。现在推荐用 Encoder。
对应到 XML
xml
<appender name="STDOUT" class="...ConsoleAppender"> <!-- Appender -->
<encoder> <!-- Encoder -->
<pattern>%d ... %msg%n</pattern> <!-- Pattern -->
</encoder>
</appender>
<root level="info"> <!-- Logger(根) -->
<appender-ref ref="STDOUT"/> <!-- Logger 挂 Appender -->
</root>
记忆口诀
- Logger 管"记不记"(级别过滤)
- Appender 管"记哪去"(输出目的地)
- Encoder 管"长啥样"(格式化)
三者是流水线关系:一条日志先过 Logger 的级别判断,再交给它挂的每个 Appender,每个 Appender 用自己的 Encoder 格式化后输出。
上一篇:SLF4J 与 Logback