配置SLF4J日志输出到D盘logs目录和控制台
下面我将为您提供一个完整的配置方案,将日志同时输出到控制台的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/目录下的日志文件"); } }

浙公网安备 33010602011771号