Logback的使用
简介
Logback是一个Java开源日志框架,以继承改善log4j为目的而生,是log4j创始人设计的另一个开源日志组件。
它声称有极佳的性能,占用空间更小,且提供其他日志系统缺失但很有用的特性。
Logback是一个日志实现框架,实现自SLF4j(Simple Logging Facade for Java),SLF4J 即:Java的简单日志门面,它不是具体的解决方案,它只服务于各种各样的日志系统。
SLF4J最常用的日志实现框架是:log4j、logback。一般有:slf4j + log4j、slf4j + log4j2、slf4j + logback三种日志组合。
SLF4J与其它日志组件调用关系图如下:
Logback使用
logback 分为以下三个模块:
- logback-core:其它两个模块的基础模块
- logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
- logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能
如果是Spring Boot项目的话则默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台
日志级别(Log level):用来控制日志信息的输出,从高到低分为共分为七个等级:
- off 最高等级,用于关闭所有日志记录。
- fatal 指出每个严重的错误事件将会导致应用程序的退出。
- error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
- warm 表明会出现潜在的错误情形。
- info 一般和在粗粒度级别上,强调应用程序的运行全程。
- debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
- all 最低等级,用于打开所有日志记录。
Maven引入:
注意:spring-boot-starter-parent里已集成logback,可直接使用
<!--
引入以下依赖,会自动引入以下jar
logback-classic.x.x.x.jar
logback-core.x.x.x.jar
slf4j-api-x.x.x.jar
-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
Jar包引入:
JavaSE项目/Plugin项目使用此方式引入
查找配置文件方式:
1.logback首先会试着查找logback.groovy文件
2.当没有找到时,继续试着查找logback-test.xml文件
3.当没有找到时,继续试着查找logback.xml文件
4.如果仍然没有找到,则使用默认配置(打印到控制台)
logback.xml配置:
Web项目:在工程resources目录下创建logback.xml
JavaSE项目/Plugin项目:在src目录下创建logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="D:/Siemens/logs"/>
<!-- Console -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
<pattern>%d[yyyy-MM-dd HH:mm:ss.SSS] [%thread] [%-5level] - Class: %logger{50} Method: %method Line: %line%n%msg%n</pattern>
</encoder>
</appender>
<!-- File -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/customer_module_%d{yyyyMMdd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d[yyyy-MM-dd HH:mm:ss.SSS] [%thread] [%-5level] - Class: %logger{50} Method: %method Line: %line%n%msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
初始化Logger:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger log = LoggerFactory.getLogger(YourClass.class);
常用log打印:
// 信息
log.info("XXXXXX:{}", Object);
// 警告
log.warn("XXXXXX:{}", Object);
// 错误
log.error("XXXXXX:{}", Object);
// 异常信息
log.error("error_message:", e);
叶子的飘落,是风的追求,还是树的不挽留.