文章摘要: Java日志体系。
简介
日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志。
主要功能
控制日志输出的内容和格式
控制日志输出的位置
日志优化、异步日志、日志文件的归档和压缩
日志系统的维护
面向接口开发的日志门面
| 日志实现 | 日志门面 |
|---|---|
| JUL | |
| log4j2 | JCL |
| logback | SLF4J |
注释
项目中必须要编写一个日志配置文件,否则在运行时会提示报错。
- 当你的项目决定使用一个日志门面来标准化日志操作时,你需要为实际使用的日志实现(如Log4j、Logback)添加一个适配器。日志门面定义了一套统一的日志操作API,而适配器则是将这套API映射到具体的日志实现上。
- 当你需要在项目中替换现有的日志框架,但又不想修改现有的代码时,可以使用桥接器。
日志框架实现
简要说明
- 日志框架实现是指具体的日志记录库,提供了日志记录的实际功能,包括日志的创建、格式化、过滤、输出等。
详细总结
- Log4j2详细总结:Library-Maven-Log4j2
- Logback详细总结:Library-Maven-Logback
日志框架门面
简要说明
- 日志框架门面是一个抽象层,它为不同的日志框架实现提供了一个统一的接口。门面模式允许应用程序使用门面提供的API进行日志记录,而无需直接依赖于具体的日志框架实现。
详细总结
- SLF4J详细总结:Library-Maven-SLF4J
日志适配器
简要说明
- 用于将一个日志门面与一个具体的日志实现连接起来。
- 当应用程序使用某个日志门面(如SLF4J)时,如果希望使用不同的日志实现(如Log4j或java.util.logging)来记录日志,就需要相应的适配器。
- Maven坐标的名称格式:
<日志框架实现> - <日志框架门面> -impl
详细总结
日志桥接器
简要说明
- 用于将一个日志实现的调用重定向到另一个日志实现的调用。
- 这种转换允许现有代码(使用某个日志实现编写的)在不修改代码的情况下,使用新的日志框架。
- Maven坐标的名称格式:
<日志框架实现> -over- <日志框架实现>
详细总结
jcl和log4j2
<dependency> <!---->
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency> <!---->
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.2</version>
</dependency>
<dependency> <!---->
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.2</version>
</dependency>
<dependency> <!--jcl日志框架门面-->
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.2</version>
</dependency>
slf4j和logback
<dependency> <!---->
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency> <!---->
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency> <!---->
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
slf4j和log4j2
要使用SLF4J作为日志门面,并结合Log4j2作为日志实现,你需要以下依赖:
- SLF4J API: 这是SLF4J的核心库,它定义了日志抽象层。
- Log4j2 API: 这是Log4j2的API库,它定义了Log4j2的日志接口。
- Log4j2 Core: 这是Log4j2的实现库,它包含了Log4j2的核心功能。
- SLF4J to Log4j2 Adapter: 这是一个适配器库,它将SLF4J的调用转换为Log4j2的调用。
以下是Maven项目的依赖配置示例:
<dependencies>
<!-- SLF4J API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>版本号</version> <!-- 请替换为实际的版本号 -->
</dependency>
<!-- Log4j2 API -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>版本号</version> <!-- 请替换为实际的版本号 -->
</dependency>
<!-- Log4j2 Core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>版本号</version> <!-- 请替换为实际的版本号 -->
</dependency>
<!-- SLF4J to Log4j2 Adapter -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>版本号</version> <!-- 请替换为实际的版本号 -->
</dependency>
</dependencies>
配置Log4j2通常涉及创建一个log4j2.xml文件(或其他支持的配置文件格式)在你的src/main/resources目录下,来定义日志记录的规则和输出格式。以下是一个简单的配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>