网站首页 > java教程 正文
在实际开发中,日志作为应用不可或缺的一部分成为了解决问题的关键解决步骤。通过日志开发者可以快速的定位问题、查找问题、还可以对应用的运行情况进行监控。而在Spring Boot应用框架中提供多种的日志处理库,可以提供开发者自由选择各种的日志处理方式,下面我们就来总结一下在Spring Boot中常用的日志处理框架。
Spring Boot 中的日志框架概览
在Spring Boot中默认使用的是SLF4J(Simple Logging Facade for Java)日志框架,配合着Logback框架作为日志的具体实现。因为在SLF4J框架中只是提供了一套统一的日志处理接口接口,而Logback框架则是SLF4J框架默认的具体实现,在Logback中提供了各种丰富的日志操作,如日志级别、格式化、异步日志等,方便开发者在配置日志中使用。
主要日志框架
除了上面的默认的日志框架之外,我们还可以使用如下的一些日志框架。
- Log4j2:一个性能优化较高的日志框架,相比于Logback,Log4j2在某些高负载场景下性能更好,且支持更多的日志输出目标,例如可以输出到数据库、文件等。
- Java Util Logging (JUL):这个是在Java中自带的日志处理框架,在Spring Boot中同样我们也可以使用该框架,但是这个框架没有Logback或Log4j2强大,所以一般在开发中很少使用。
Spring Boot 默认日志配置
在Spring Boot中,默认的日志框架是SLF4J + Logback。而在Spring Boot中默认是支持了这两个框架,我们只需要添加spring-boot-starter-logging日志处理框架即可, 如下所示。当然如果没有显式替换过日志框架,在Spring Boot应用中默认引用的也是这个依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
日志记录
既然Spring Boot中,默认使用的是SLF4J框架进行的日志管理,那么下面我们就来看看如何通过这个日志框架来实现日志记录操作。
常见日志等级介绍,常见的日志等级分为了六个等级,等级从高到底依次如下所示。
- TRACE:最详细的日志,通常用于调试。
- DEBUG:用于开发调试,通常用于显示开发过程中较为详细的信息。
- INFO:用于输出一些重要的信息,通常用于系统正常运行时的状态信息。
- WARN:警告级别,表示可能存在问题的情况,但不影响程序运行。
- ERROR:错误级别,表示程序发生了错误,通常需要开发人员处理。
- FATAL:非常严重的错误,通常会导致应用程序崩溃。
在代码实现中,我们可以通过如下的方式来实现日志的记录操作。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
private static final Logger logger = LoggerFactory.getLogger(MyService.class);
public void performAction() {
logger.trace("This is a TRACE log");
logger.debug("This is a DEBUG log");
logger.info("This is an INFO log");
logger.warn("This is a WARN log");
logger.error("This is an ERROR log");
}
}
在实际开发中,对于日志输出级别的调整主要取决于实际应用中的需求,在开发阶段我们一般使用的是DEBUG和TRACE级别的日志输出,便于定位和查找问题。而在生产环境中我们一般只记录INFO级别以上的日志,因为在服务器上日志过多会影响服务器存储。而对于异常日志测试采用ERROR级别的日志进行输出,这样方便在后续线上应用问题定位中快速的找到出错的位置。
日志配置
在Spring Boot中默认使用了Logback作为日志的实现,也就是说在不做任何的配置的情况下,就会使用默认的日志配置方式来进行输出,也就是默认将日志输出到控制台中,然后使用的日志格式也是系统默认的日志格式。
当然在实际场景中,我们可以通过使用application.yml配置文件来对日志操作进行调整,如下所示,可以调整日志格式、日志级别、日志处理文件等。
logging:
level:
root: INFO
org.springframework.web: DEBUG
com.example: TRACE
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
file:
name: logs/app.log
max-size: 10MB
max-history: 30
当然我们也可以对Logback的日志配置来进行调整,我们可以在resource目录下创建logback-spring.xml或logback.xml来进一步控制日志行为,如下所示。
<configuration>
<!-- 定义日志输出格式 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>
<!-- 定义日志输出文件 -->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>
<!-- 设置日志级别和输出源 -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
<!-- 特定包的日志级别 -->
<logger name="org.springframework" level="DEBUG"/>
</configuration>
通过这种方式,我们可以控制日志的输出格式、输出文件、输出日志策略等操作。
集成其他日志框架
如果觉得Logback日志框架不好用,我们也可以将其替换成Log4j2框架,如下所示,首先需要从POM文件中排除spring-boot-starter-logging,并添加Log4j2的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
然后再resource目录中添加log4j2.xml配置文件,内容如下所示。
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} - %msg%n"/>
</Console>
<File name="File" fileName="logs/app.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
当然我们还可以使用其他的日志处理框架,这里建议使用默认的框架或者是Log4j2,因为这两个都是久经考验的日志框架。
日志文件管理
在上面的配置中我们提到了一个日志滚动机制,通过日志滚动机制我们可以实现自动日志文件的切分这样可以防止应用程序日志太大不便于查询,我们可以通过如下的方式来配置日志滚动策略。
logging.file.name=logs/app.log
logging.file.max-size=10MB
logging.file.max-history=30
通过这样的配置,我们可以控制文件的数量以及大小,这样我们可以通过定时任务来清理过期的日志文件,保证不会出现日志文件过大占用磁盘导致应用程序相应过慢的问题。
总结
在Spring Boot中默认就提供了一个功能强大的日志处理机制,通过自动的日志配置可以快速实现日志管理操作,当然在实际使用场景中,我们可以对日志控制机制进行扩展,例如可以将日志写入到ElasticSearch中或者是写入的Kafka中进行进一步的日志分析处理。
猜你喜欢
- 2024-11-27 深入浅“粗”SpringBoot日志框架
- 2024-11-27 SpringBoot接入轻量级分布式日志框架(GrayLog)
- 2024-11-27 JAVA编程规范之日志规约
- 2024-11-27 阿里强制使用SLF4J日志框架的缘由
- 2024-11-27 杂谈 : 日志门户 slf4j 如何集成日志框架的
- 2024-11-27 tomcat各个日志文件的区别
- 2024-11-27 Mybatis 添加日志功能
- 2024-11-27 精通springcloud:分布式日志记录和跟踪
- 2024-11-27 阿里巴巴Java开发规范(4):日志规约
- 2024-11-27 「springboot」Slf4j日志框架的体系结构
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)