Logback的使用和logback.xml详解
Logback是一种高效和功能丰富的日志框架,它是log4j框架的升级版,而且使用非常简单。这里将介绍Logback的基本使用和配置文件logback.xml的详细解释。
Logback的基本使用
1. 添加Logback的依赖
首先,在项目的pom.xml文件中添加logback的依赖:
<dependencies>
<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>
</dependencies>
2. 使用Logback写日志
使用Logback写日志非常方便。首先我们需要在Java代码中申明一个Logger对象:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
// 其他代码省略...
}
然后就可以通过Logger对象来输出日志了:
logger.debug("调试信息");
logger.info("普通信息");
logger.warn("警告信息,发生错误但不影响系统运行");
logger.error("错误信息,系统出现了严重错误");
在以上代码中,logger.debug()输出的级别是DEBUG,logger.info()输出的级别是INFO,logger.warn()输出的级别是WARN,logger.error()输出的级别是ERROR。
logback.xml配置文件详解
Logback的配置文件一般命名为logback.xml,并放置在classpath的根目录下。下面是一个logback.xml的模板:
<configuration>
<!-- appender -->
<!-- logger -->
<!-- root -->
</configuration>
在配置文件中,有三个最常用的元素:appender、logger和root。
1. Appender
Appender是用来定义Logback输出日志的目的地。常用的Appender有ConsoleAppender、FileAppender和RollingFileAppender。
ConsoleAppender
ConsoleAppender是输出到控制台的Appender,它的示例代码如下:
<appender name="myConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
常用的属性说明:
name
: 定义这个Appender的名字class
: 定义这个Appender实现类的全限定名encoder
: 定义日志输出的格式,即输出的pattern模板。这里我们使用%d输出日期和时间,%thread输出线程ID,%-5level输出级别(超过5个字符长度则自动截断),%logger{36}输出日志记录器的名称(最长不超过36个字符)。
FileAppender
FileAppender是输出到文件的Appender,示例代码如下:
<appender name="myFileAppender" class="ch.qos.logback.core.FileAppender">
<file>mylog.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
常用的属性说明:
name
: 定义这个Appender的名字class
: 定义这个Appender实现类的全限定名file
: 定义输出日志的文件名和路径,这里我们定义输出到当前目录下的mylog.log文件。encoder
: 定义日志输出的格式,即输出的pattern模板。这里和ConsoleAppender一样。
RollingFileAppender
RollingFileAppender是每隔一段时间或文件大小就生成一个新文件进行输出的Appender,示例代码如下:
<appender name="myRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>mylog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>mylog.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
常用的属性说明:
name
: 定义这个Appender的名字class
: 定义这个Appender实现类的全限定名file
: 定义输出日志的文件名和路径,这里我们定义输出到当前目录下的mylog.log文件。rollingPolicy
: 定义日志切分的策略类,这里我们使用的是TimeBasedRollingPolicy,即按时间分割策略,可以根据时间规律来生成文件名,时间模板是%dt。也可以使用SizeAndTimeBasedRollingPolicy策略,即按时间和大小分割策略。fileNamePattern
: 定义日志文件名的格式,这里指定按日期分割,文件名类似mylog.2019-12-30.logmaxHistory
: 定义最大保留文件的数量。
2. Logger
Logger用来记录一条日志信息,并将其输出到我们指定的Appender中。Logger实现了日志传递的机制。当某个Logger实例收到一条日志消息后,它会将这个消息传递给自己的父Logger。如果这条日志与某个Logger的关键字匹配,这个Logger会将该日志输出到我们指定的Appender中。
例如:
<logger name="com.example">
<level value="info"/>
<appender-ref ref="myFileAppender"/>
</logger>
这表示当类路径为com.example的日志级别为INFO级别时,它将会被输出到我们定义的myFileAppender中。
常用的属性说明:
name
: 定义这个Logger的名字。可以以包名的形式写,例如:"com.example"level
: 定义日志输出的级别。可以指定为 trace、debug、info、warn、error、off。当某个logger的级别设为info时,只有收到级别为warn、error的日志才能输出。additivity
: 是否继承大于当前Logger的log级别,默认true。appender-ref
: 定义Logger输出到的Appender。
3. Root
RootLogger是所有Logger的根Logger,是Logger层次中最高级别的Logger。当一个日志请求传递到Logger层次中没有更多的Logger算子时,它会传递到RootLogger,然后通过RootLogger输出到我们指定的Appender中。
例如:
<root level="info">
<appender-ref ref="myFileAppender"/>
</root>
这表示所有的日志信息都将首先发送到RootLogger,然后再传递给其他的Logger。在这个例子中,只有INFO级别以上的日志信息才会被记录到我们定义的myFileAppender中。
至此,我们已经学习了Logback的基本使用和logback.xml配置文件的内容和解释,在实际开发中使用Logback进行日志管理将会变得更加便捷。
示例
1. 控制台输出示例
在控制台中输出日志的示例代码如下:
<configuration>
<appender name="myConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="myConsoleAppender" />
</root>
</configuration>
在Java代码中使用Logger的示例代码如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public static void main(String[] args) {
logger.debug("调试信息");
logger.info("普通信息");
logger.warn("警告信息,发生错误但不影响系统运行");
logger.error("错误信息,系统出现了严重错误");
}
}
2. 文件输出示例
把日志输出到文件中的示例代码如下:
<configuration>
<appender name="myFileAppender" class="ch.qos.logback.core.FileAppender">
<file>mylog.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="myFileAppender" />
</root>
</configuration>
在Java代码中使用Logger的示例代码如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public static void main(String[] args) {
logger.debug("调试信息");
logger.info("普通信息");
logger.warn("警告信息,发生错误但不影响系统运行");
logger.error("错误信息,系统出现了严重错误");
}
}
以上示例将会把日志输出到当前目录下的mylog.log文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:logback的使用和logback.xml详解(小结) - Python技术站