SLF4J+Logback MDC

– Start

下面的代码调用了 Account 和 Trade 服务。我们想让Account 和 Trade 服务里的 log 打印到它们自己的 log 中。

package demo13;

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

import ch.qos.logback.classic.util.ContextInitializer;

public class App {
	static {
		// 通过命令行参数指定配置文件的地址
		// java -Dlogback.configurationFile=demo13/logback.xml
		System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "demo13/logback.xml");
	}
	// 创建 logger 对象
	final static Logger logger = LoggerFactory.getLogger(App.class);

	public static void main(String[] args) {
		logger.info("call account service begin");
		new AccountService().queryAccount();
		logger.info("call account service end");

		logger.info("call trade service begin");
		new TradeService().queryTrade();
		logger.info("call trade service end");
	}

}

package demo13;

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

public class AccountService {
	final static Logger logger = LoggerFactory.getLogger(AccountService.class);
	
	private void beginService() {
		MDC.put("SERVICE_ID", "Account");
	}
	
	private void exitService() {
		MDC.put("SERVICE_ID", "All");
	}
	
	public void queryAccount() {
		beginService();
		logger.info("queryAccount");
		exitService();
	}
}

package demo13;

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

public class TradeService {
	final static Logger logger = LoggerFactory.getLogger(TradeService.class);
	
	private void beginService() {
		MDC.put("SERVICE_ID", "Trade");
	}
	
	private void exitService() {
		MDC.put("SERVICE_ID", "All");
	}
	
	public void queryTrade() {
		beginService();
		logger.info("queryTrade");
		exitService();
	}
}

<configuration debug="true">

  <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>
  
  <!-- 读取 property 文件 -->
  <property resource="demo13/mySystem.properties"/>
  
  <!-- 每日滚动日志 -->
  <appender name="FILE" class="ch.qos.logback.classic.sift.SiftingAppender">
  	<discriminator>
  		<key>SERVICE_ID</key>
  		<defaultValue>All</defaultValue>
  	</discriminator>
  	<sift>
	  <appender name="FILE-${SERVICE_ID}" class="ch.qos.logback.core.rolling.RollingFileAppender">
	  	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
		  	<fileNamePattern>${LOG_DIR}/demo13.${SERVICE_ID}.%d{yyyy-MM-dd}.log</fileNamePattern>
	  		<maxHistory>30</maxHistory>
	  		<totalSizeCap>3GB</totalSizeCap>
	  	</rollingPolicy>
	    <encoder>
	      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
	    </encoder>
	  </appender>
  	</sift>
  </appender>
  
  <!-- 同时写入log到控制台和文件 -->
  <root level="trace">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

– 更多参见:SLF4J+Logback 精萃
– 声 明:转载请注明出处
– Last Updated on 2019-08-25
– Written by ShangBo on 2019-08-25
– End

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值