Java日志框架之logback使用详解
1. 什么是logback
logback是一个优秀的Java日志框架,是log4j框架的继任者,具有与log4j相同的特性,通用性广、性能高、配置简单等优点,是目前Java项目中最常用的日志框架之一。
2. logback的基本使用方式
2.1 引入依赖
使用logback框架首先需要引入相应的依赖,通常情况下我们在Maven项目的pom.xml文件中添加以下依赖即可:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
2.2 配置文件
logback的配置文件通常为logback.xml或logback.groovy,其中logback.xml为配置文件的扩展名,一般来说我们使用xml格式进行配置。
一份简单的配置文件如下:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.foo.Bar" level="DEBUG"/>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
上述配置文件中,我们定义了一个名为STDOUT的追加器(appender),配置了输出日志到控制台的信息,%d表示日期时间,%thread表示线程名,%-5level表示日志级别,%logger表示日志输出名,%msg表示日志消息,%n表示换行符。
另外,我们还定义了名为com.foo.Bar的日志记录器(logger),级别为DEBUG。最后,我们将根logger的日志级别设置为INFO,并用appender-ref元素将它连接到名为STDOUT的追加器上。
2.3 使用日志
在代码中使用logback需要定义一个变量,示例代码如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
private static final Logger LOGGER = LoggerFactory.getLogger(HelloWorld.class);
public static void main(String[] args) {
LOGGER.info("Hello World!");
}
}
上述代码中,我们先引入org.slf4j下的Logger和LoggerFactory类,通过LoggerFactory类的getLogger方法获取一个Logger对象,最后在main方法中使用LOGGER对象输出日志。
3. logback的进阶用法
3.1 日志分级
logback支持6个级别的日志输出,包括TRACE、DEBUG、INFO、WARN、ERROR、FATAL,级别从低到高,输出的日志级别越高则输出的信息越具体、越严重。
我们可以通过调整配置文件中logger的level属性来进行日志分级:
<logger name="com.foo.Bar" level="TRACE"/>
<logger name="com.foo.Foo" level="DEBUG"/>
<logger name="org.springframework" level="INFO"/>
上述代码中,我们将com.foo.Bar记录器的日志级别设置为TRACE,com.foo.Foo记录器的日志级别设置为DEBUG,将org.springframework记录器的日志级别设置为INFO。
3.2 日志输出方式
logback支持多种日志输出方式,包括控制台输出、文件输出、异步输出等。我们可以通过修改配置文件来设置输出方式。
以下是一个输出到文件的示例配置:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>example.log</file>
<append>true</append>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %message%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE"/>
</root>
</configuration>
在上述配置文件中,我们定义了一个名为FILE的追加器,将日志输出到当前运行目录下的example.log文件中。
通过修改配置文件中appender元素的class属性,我们可以选择不同的输出方式,例如控制台输出、异步输出等。
3.3 自定义日志输出格式
logback支持自定义日志输出格式,我们可以修改配置文件来设置自定义的日志输出格式。
以下是一个自定义输出格式的示例:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%yellow(%d{HH:mm:ss.SSS}) [%-5p] %blue([%C:%L])%n%m%n</pattern>
</encoder>
</appender>
上述配置文件中,我们定义了一个控制台追加器,并使用PatternLayoutEncoder来定义日志输出格式。在输出格式中,使用%d来表示日期时间,%p来表示日志级别,%C表示日志输出类名,%L表示日志输出位置,%m表示日志输出信息。
另外,我们调用了一些自定义的颜色代码,在输出日志时可以为日志信息添加不同的颜色标识以便更容易的辨别不同的日志级别。
4. logback的示例说明
4.1 控制台输出示例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ConsoleDemo {
private static final Logger LOGGER = LoggerFactory.getLogger(ConsoleDemo.class);
public static void main(String[] args) {
LOGGER.trace("I am trace log.");
LOGGER.debug("I am debug log.");
LOGGER.info("I am info log.");
LOGGER.warn("I am warn log.");
LOGGER.error("I am error log.");
}
}
在以上示例代码中,我们通过获取Logger对象输出了5个不同级别的日志信息。运行代码输出的日志信息如下:
[main] TRACE io.github.jaychoufans.Consoletest - I am trace log.
[main] DEBUG io.github.jaychoufans.Consoletest - I am debug log.
[main] INFO io.github.jaychoufans.Consoletest - I am info log.
[main] WARN io.github.jaychoufans.Consoletest - I am warn log.
[main] ERROR io.github.jaychoufans.Consoletest - I am error log.
4.2 文件输出示例
<configuration>
<appender name="FileAppender" class="ch.qos.logback.core.FileAppender">
<file>logs/example.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FileAppender"/>
</root>
</configuration>
在以上示例中,我们将日志输出到logs/example.log文件中,日志格式与之前相同,运行代码输出的日志信息如下:
2021-11-11 20:47:27.145 [main] INFO io.github.jaychoufans.FileOutputDemo - I am info log.
2021-11-11 20:47:27.146 [main] WARN io.github.jaychoufans.FileOutputDemo - I am warn log.
2021-11-11 20:47:27.148 [main] ERROR io.github.jaychoufans.FileOutputDemo - I am error log.
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java日志框架之logback使用详解 - Python技术站