31 | Logger组件:Tomcat的日志框架及实战
Posted IT编程学习栈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了31 | Logger组件:Tomcat的日志框架及实战相关的知识,希望对你有一定的参考价值。
每一个系统都有一些通用的模块,比如日志模块、异常处理模块、工具类等,对于 Tomcat 来说,比较重要的通用模块有日志、Session 管理和集群管理。从今天开始我会分三期来介绍通用模块,今天这一期先来讲日志模块。
日志模块作为一个通用的功能,在系统里通常会使用第三方的日志框架。Java 的日志框架有很多,比如:JUL(Java Util Logging)、Log4j、Logback、Log4j2、Tinylog 等。除此之外,还有 JCL(Apache Commons Logging)和 SLF4J 这样的“门面日志”。下面是 SLF4J 与日志框架 Logback、Log4j 的关系图:
我先来解释一下什么是“门面日志”。“门面日志”利用了设计模式中的门面模式思想,对外提供一套通用的日志记录的 API,而不提供具体的日志输出服务,如果要实现日志输出,需要集成其他的日志框架,比如 Log4j、Logback、Log4j2 等。
这种门面模式的好处在于,记录日志的 API 和日志输出的服务分离开,代码里面只需要关注记录日志的 API,通过 SLF4J 指定的接口记录日志;而日志输出通过引入 JAR 包的方式即可指定其他的日志框架。当我们需要改变系统的日志输出服务时,不用修改代码,只需要改变引入日志输出框架 JAR 包。
今天我们就来看看 Tomcat 的日志模块是如何实现的。默认情况下,Tomcat 使用自身的 JULI 作为 Tomcat 内部的日志处理系统。JULI 的日志门面采用了 JCL;而 JULI 的具体实现是构建在 Java 原生的日志系统java.util.logging
之上的,所以在看 JULI 的日志系统之前,我先简单介绍一下 Java 的日志系统。
Java 日志系统
Java 的日志包在java.util.logging
路径下,包含了几个比较重要的组件,我们通过一张图来理解一下:
从图上我们看到这样几个重要的组件:
Logger:用来记录日志的类。
Handler:规定了日志的输出方式,如控制台输出、写入文件。
Level:定义了日志的不同等级。
Formatter:将日志信息格式化,比如纯文本、XML。
我们可以通过下面的代码来使用这些组件:
public static void main(String[] args) {
Logger logger = Logger.getLogger("com.mycompany.myapp");
logger.setLevel(Level.FINE);
logger.setUseParentHandlers(false);
Handler hd = new ConsoleHandler();
hd.setLevel(Level.FINE);
logger.addHandler(hd);
logger.info("start log");
}
复制代码以上是关于31 | Logger组件:Tomcat的日志框架及实战的主要内容,如果未能解决你的问题,请参考以下文章
How tomcat works(深入剖析tomcat) Logger
Java日志框架 -- LOG4J(Log4j入门案例日志级别Log4j组件(LoggersAppendersLayouts)配置文件内置日志记录自定义Logger)
Java日志框架 -- LOG4J(Log4j入门案例日志级别Log4j组件(LoggersAppendersLayouts)配置文件内置日志记录自定义Logger)