下面我将为您提供一个完整的配置方案,将日志同时输出到控制台的D盘logs目录下,并设置不同的日志级别。
1. 添加必要的依赖
在Maven项目的pom.xml
中添加以下依赖:
<dependencies><!-- SLF4J API --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.9</version></dependency><!-- Logback实现 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.11</version></dependency><!-- Lombok(用于@Slf4j注解) --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope></dependency> </dependencies>
2. 创建Logback配置文件
在src/main/resources
目录下创建logback.xml
文件:
<?xml version="1.0" encoding="UTF-8"?> <configuration><!-- 定义变量 --><property name="LOG_DIR" value="D:/logs" /><property name="LOG_FILE" value="application" /><!-- 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder><!-- 设置控制台日志级别 --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter></appender><!-- 文件输出 - 所有级别 --><appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_DIR}/${LOG_FILE}.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder><!-- 设置文件滚动策略 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_DIR}/${LOG_FILE}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>10MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>1GB</totalSizeCap></rollingPolicy><!-- 设置文件日志级别 --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter></appender><!-- 文件输出 - 错误级别 --><appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_DIR}/${LOG_FILE}-error.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_DIR}/${LOG_FILE}-error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>10MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>1GB</totalSizeCap></rollingPolicy><!-- 只记录ERROR级别日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 根日志记录器 --><root level="DEBUG"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE_ALL" /><appender-ref ref="FILE_ERROR" /></root><!-- 特定包的日志级别配置示例 --><logger name="com.yourpackage.service" level="DEBUG" additivity="false"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE_ALL" /></logger><!-- 第三方库日志级别控制 --><logger name="org.hibernate" level="WARN" /><logger name="org.springframework" level="INFO" /> </configuration>
3. 使用@Slf4j注解记录日志
在Java类中使用Lombok的@Slf4j注解:
import lombok.extern.slf4j.Slf4j;@Slf4j public class ExampleService {public void process() {log.trace("这是一条TRACE级别日志");log.debug("这是一条DEBUG级别日志 - 用于调试");log.info("这是一条INFO级别日志 - 业务信息");log.warn("这是一条WARN级别日志 - 警告信息");log.error("这是一条ERROR级别日志 - 错误信息");try {// 模拟可能出错的代码int result = 10 / 0;} catch (Exception e) {log.error("处理过程中发生错误: ", e);}}public static void main(String[] args) {ExampleService service = new ExampleService();service.process();// 打印日志文件位置信息log.info("日志文件保存在: D:/logs/ 目录下");} }
4. 确保D盘logs目录存在
在运行应用程序前,请确保D盘logs目录存在,或者应用程序有权限创建该目录。您也可以添加以下代码在应用程序启动时创建目录:
import java.io.File;public class LogDirectoryCreator {public static void ensureLogDirectoryExists() {File logDir = new File("D:/logs");if (!logDir.exists()) {boolean created = logDir.mkdirs();if (created) {System.out.println("创建日志目录: " + logDir.getAbsolutePath());} else {System.err.println("无法创建日志目录: " + logDir.getAbsolutePath());}}} }
在应用程序启动时调用:
import lombok.extern.slf4j.Slf4j;@Slf4j public class LogTest {public static void main(String[] args) {log.trace("TRACE级别消息");log.debug("DEBUG级别消息");log.info("INFO级别消息");log.warn("WARN级别消息");log.error("ERROR级别消息");try {throw new RuntimeException("测试异常");} catch (Exception e) {log.error("捕获到异常", e);}System.out.println("请检查D:/logs/目录下的日志文件");} }
7. 测试配置
创建一个简单的测试类来验证配置是否正常工作:
import lombok.extern.slf4j.Slf4j;@Slf4j public class LogTest {public static void main(String[] args) {log.trace("TRACE级别消息");log.debug("DEBUG级别消息");log.info("INFO级别消息");log.warn("WARN级别消息");log.error("ERROR级别消息");try {throw new RuntimeException("测试异常");} catch (Exception e) {log.error("捕获到异常", e);}System.out.println("请检查D:/logs/目录下的日志文件");} }