Logback –每个线程的日志文件不同

本教程介绍如何使用Logback配置,确保每个线程生成其自己的日志文件。通过示例展示了logback.xml配置和Java线程应用,强调了Logback的Mapped Diagnostic Context(MDC)功能,可用于将每个用户的活动、每个URI请求或远程主机的日志记录到单独文件。
摘要由CSDN通过智能技术生成
每个线程的logback不同日志

在本教程中,我们将向您展示如何使用回溯Mapped Diagnostic Context (MDC)SiftingAppender为每个线程创建一个单独的日志文件。

经Logback 1.1.2测试的PS,应在较早版本中工作。

注意
有关更多信息,请参阅此Logback MDC文档

1. logback.xml示例

一个logback.xml文件,向您展示如何声明和配置SiftingAppenderMDC

logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

	<property name="USER_HOME" value="C:\\logs\\analyzer" />

	<appender name="FILE-THREAD" class="ch.qos.logback.classic.sift.SiftingAppender">

		<!-- This is MDC value -->
		<!-- We will assign a value to 'logFileName' via Java code -->
		<discriminator>
			<key>logFileName</key>
			<defaultValue>head0</defaultValue>
		</discriminator>

		<sift>

		  <!-- A standard RollingFileAppender, the log file is based on 'logFileName' at runtime  -->
		  <appender name="FILE-${logFileName}"
			class="ch.qos.logback.core.rolling.RollingFileAppender">
			<file>${USER_HOME}/${logFileName}.log</file>

			<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
				<Pattern>
					%d{yyyy-MM-dd HH:mm:ss} %mdc [%thread] %level %logger{35} - %msg%n
				</Pattern>
			</encoder>

			<rollingPolicy
				class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
				<FileNamePattern>${USER_HOME}/${logFileName}.%i.log.zip
				</FileNamePattern>
				<MinIndex>1</MinIndex>
				<MaxIndex>10</MaxIndex>
			</rollingPolicy>

			<triggeringPolicy
				class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
				<MaxFileSize>10MB</MaxFileSize>
			</triggeringPolicy>

		  </appender>

		</sift>
	</appender>

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<layout class="ch.qos.logback.classic.PatternLayout">
			<Pattern>
				%-5level %logger{36} - %msg%n
			</Pattern>
		</layout>
	</appender>

	<logger name="com.mkyong.analyzer.core" level="debug"
		additivity="false">
		<appender-ref ref="FILE-THREAD" />
		<appender-ref ref="STDOUT" />
	</logger>

	<root level="error">
		<appender-ref ref="STDOUT" />
	</root>

</configuration>

2. Java线程示例

一个简单的线程示例,通过MDC.put声明了'logFileName'值

Head.java
package com.mkyong.analyzer.core;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

public class Head implements Runnable {

	static Logger logger = LoggerFactory.getLogger(Head.class);

	private String name;
	
	@Override
	public void run() {

		MDC.put('logFileName', getName());

		logger.debug("hello");

		//remember remove this
		MDC.remove('logFileName');

	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

开始10个线程

int count = 1;
	while(count<=10){
		Head head = new Head();
		head.setName("head-" + count);
		threadPools.execute(head);
		count++;
	}

输出:10个线程的10个单独的日志文件。

每个线程的logback不同日志

注意
使用此MDC功能,您甚至可以将每个登录用户,每个URI请求,每个远程主机等的输出记录到单独的日志文件中。

参考文献

  1. Logback MDC文档

翻译自: https://mkyong.com/logging/logback-different-log-file-for-each-thread/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值