logback输出多个日志文件

本文介绍如何使用Logback进行高效灵活的日志管理。通过配置文件实现不同需求的日志输出,包括按时间滚动、定制日志格式等。利用Logback的强大功能提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前一直用slf4j+logback作为应用程序的日志组件,部署时,将日志输入到文件,以备检视。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>bau.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>logs/xxx.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%-20(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{80} - %msg%n</pattern>
		</encoder>
	</appender>

	<root level="WARN">
		<appender-ref ref="file" />
	</root>
</configuration> 


最近一个项目中,需要将系统的一些信息记录到文件中,考虑到以后可能会加一些需求,如日志的格式,日志按一定大小切割,还是按时间切割等,手工写起来还是比较烦琐的。

考虑到logback中已经有此功能。于是查了下文档:


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>bau.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>logs/xxx.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%-20(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{80} - %msg%n</pattern>
		</encoder>
	</appender>
	
	<appender name="event" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>E:\\event.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>E:\\event.%d{yyyy-MM-dd}.log</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%msg%n</pattern>
		</encoder>
	</appender>

	<logger name="cn.company.bau.desktop.composite.EventRealTimeComposite" level="INFO" additivity="false">
		<appender-ref ref="event" />
	</logger>

	<root level="WARN">
		<appender-ref ref="file" />
	</root>
</configuration>  


新增一个event的appender名字叫event,新加一个logger,将其apender指定为event,指定其level为INFO,additivity="false"这个最重要,指定日志不向上一级输入。

之后,在类cn.company.bau.desktop.composite.EventRealTimeComposite中,就可以用logger.info("xxx")输出日志,日志会记录到event.log中,并按策略生成,以供分析


总结:

充分利用开源组件的特性,而且功能丰富

代码只写一行,大提高了生产效率


<think>我们面对的任务是:在JUnit测试中配置SLF4J与Logback,将日志信息写入文件。 步骤: 1. 添加必要的依赖(Maven示例) 2. 创建Logback的配置文件(logback-test.xml)并放置在测试资源目录下(src/test/resources) 3. 在配置文件中配置文件追加器(FileAppender)以及相关的输出设置 4. 在测试代码中使用SLF4J的Logger进行日志记录 5. 确保测试运行时使用该配置 详细步骤: 第一步:添加依赖(如果项目还没有引入Slf4j和Logback) 在pom.xml中添加以下依赖(版本号根据实际情况调整): ```xml <dependencies> <!-- SLF4J API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <!-- Logback 核心 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.11</version> </dependency> <!-- Logback 经典实现(包含Slf4j的绑定) --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> <scope>test</scope> </dependency> <!-- 如果需要,添加JUnit依赖(假设使用JUnit5) --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.8.2</version> <scope>test</scope> </dependency> </dependencies> ``` 第二步:创建Logback配置文件 在`src/test/resources`目录下创建`logback-test.xml`文件(注意:测试环境使用`logback-test.xml`,而主程序使用`logback.xml`,这样测试时Logback会自动加载测试配置)。 配置文件内容示例(将日志输出到文件): ```xml <configuration> <!-- 定义文件输出格式 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /> <!-- 文件追加器,将日志写入文件 --> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <!-- 设置日志文件路径(这里输出到项目根目录下的target目录,文件名为test.log) --> <file>target/test.log</file> <!-- 设置输出格式 --> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <!-- 设置根日志级别,并引用文件追加器 --> <root level="INFO"> <appender-ref ref="FILE" /> </root> </configuration> ``` 第三步:在测试类中使用SLF4J记录日志 示例测试类: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.junit.jupiter.api.Test; public class MyTest { private static final Logger logger = LoggerFactory.getLogger(MyTest.class); @Test public void testLogging() { logger.info("This is an info message"); logger.error("This is an error message"); } } ``` 运行测试后,日志将写入`target/test.log`文件中。 注意事项: 1. 确保配置文件在测试资源目录下,且命名为`logback-test.xml`(这是Logback在测试环境默认加载的配置文件名)。 2. 如果需要同时输出到控制台和文件,可以配置多个appender,并在root中引用多个appender。 3. 日志文件路径可以根据需要调整。 扩展:如果希望每个测试类单独一个日志文件,可以动态设置文件名(例如使用测试类名),这需要更复杂的配置(如使用SiftingAppender)或通过编程方式配置Logback。 相关问题: 1. 如何在Logback配置中同时输出到控制台和文件? 2. 如何按日志级别将日志输出到不同的文件? 3. 如何在JUnit测试中动态设置日志文件名(例如使用测试类名)? 4. 如何配置Logback以支持日志文件的滚动(例如按日期或大小滚动)?</think>### 在JUnit测试中配置SLF4J与Logback输出日志到文件 以下是完整配置步骤(基于Maven项目): #### 1. 添加依赖(pom.xml) ```xml <dependencies> <!-- SLF4J API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <!-- Logback 实现 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> <scope>test</scope> </dependency> <!-- JUnit 5 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.8.2</version> <scope>test</scope> </dependency> </dependencies> ``` #### 2. 创建Logback配置文件(src/test/resources/logback-test.xml) ```xml <configuration> <!-- 文件输出配置 --> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>target/test-logs/test.log</file> <!-- 日志文件路径 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 控制台输出配置(可选) --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 根日志级别配置 --> <root level="INFO"> <appender-ref ref="FILE" /> <!-- 如需同时输出到控制台,添加此行 --> <!-- <appender-ref ref="STDOUT" /> --> </root> </configuration> ``` #### 3. 测试类示例 ```java import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; class MyServiceTest { private static final Logger logger = LoggerFactory.getLogger(MyServiceTest.class); @Test void testLogging() { logger.info("测试开始 - 日志将写入文件"); logger.debug("调试信息"); // 默认不输出(因级别为INFO) logger.error("模拟错误日志"); logger.info("测试结束"); } } ``` #### 4. 验证结果 运行测试后,日志文件将生成在: `项目目录/target/test-logs/test.log` 内容示例: ``` 2023-08-10 14:23:45.678 [main] INFO com.example.MyServiceTest - 测试开始 - 日志将写入文件 2023-08-10 14:23:45.679 [main] ERROR com.example.MyServiceTest - 模拟错误日志 2023-08-10 14:23:45.680 [main] INFO com.example.MyServiceTest - 测试结束 ``` #### 关键配置说明 1. **文件位置**:必须放在`src/test/resources`目录 2. **配置文件命名**: - 测试环境专用:`logback-test.xml` - 主环境使用:`logback.xml` 3. **日志级别控制**: - 修改`<root level="INFO">`中的级别 - 支持:TRACE, DEBUG, INFO, WARN, ERROR 4. **高级特性**(可选): ```xml <!-- 按日期滚动日志 --> <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>target/test-logs/test.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>target/test-logs/test.%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder><pattern>%msg%n</pattern></encoder> </appender> ``` > **注意**:测试配置不会影响主程序日志Logback在测试环境会自动优先加载`logback-test.xml`[^1][^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值