在基于springBoot项目开发的应用程序中,在pom文件中引入了spring-boot-starter-logging起步依赖用于项目中的日志打印,现在需要将项目中打印的日志按不同的内容存储在不同路径的文件下,并根据需求分别指定每份文件的日志打印级别及保存期限。请给出问题的解决思路及实现代码,包含所有需要的配置文件配置,并添加尽可能多的详细注释。
时间: 2024-02-13 09:06:21 浏览: 66
解决思路:
1. 首先需要在pom.xml中引入logback-classic依赖,用于实现日志文件的输出。
2. 在src/main/resources下创建logback.xml文件,用于配置日志输出的相关内容,包括日志输出的格式、级别、文件路径等。
3. 在logback.xml中配置多个appender(即输出目标),每个appender对应一个日志文件,可以分别配置不同的文件路径、日志级别、保存期限等。
4. 配置logger,指定日志输出的级别和输出目标。可以为不同的包或类指定不同的日志级别和输出目标。
实现代码:
1. 在pom.xml中引入logback-classic依赖:
```xml
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
```
2. 创建logback.xml文件,配置日志输出内容:
```xml
<configuration>
<!-- 定义日志输出格式 -->
<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- 定义控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 定义info级别的日志输出到文件info.log -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/myapp/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/myapp/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 定义error级别的日志输出到文件error.log -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/myapp/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/myapp/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 定义logger,指定日志输出的级别和输出目标 -->
<logger name="com.example.myapp" level="info">
<appender-ref ref="INFO" />
</logger>
<logger name="com.example.myapp.service" level="error">
<appender-ref ref="ERROR" />
</logger>
<!-- 定义根logger,输出到控制台 -->
<root level="debug">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
```
上述代码中,定义了三个输出目标:控制台(CONSOLE)、info级别的日志文件(INFO)和error级别的日志文件(ERROR)。其中,RollingFileAppender用于循环输出日志文件,TimeBasedRollingPolicy用于按日期循环输出日志文件,maxHistory指定保存的最大文件数。
3. 在代码中使用Logger对象记录日志:
```java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
private static final Logger logger = LoggerFactory.getLogger(MyService.class);
public void doSomething() {
logger.info("info log message");
logger.error("error log message");
}
}
```
上述代码中,使用了slf4j的LoggerFactory创建Logger对象,并在代码中使用Logger对象记录日志。根据logback.xml中的配置,info级别的日志输出到/var/log/myapp/info.log文件中,error级别的日志输出到/var/log/myapp/error.log文件中。对于其他级别的日志,输出到控制台。
4. 配置application.properties文件,禁用springBoot自带的日志配置:
```
logging.config=classpath:logback.xml
logging.level.root=error
```
上述代码中,logging.config指定logback.xml文件的位置,logging.level.root指定根logger的日志级别。
通过上述步骤,即可实现在基于springBoot项目开发的应用程序中,将项目中打印的日志按不同的内容存储在不同路径的文件下,并根据需求分别指定每份文件的日志打印级别及保存期限。
阅读全文