Examples done.
This commit is contained in:
		
							parent
							
								
									189bee7872
								
							
						
					
					
						commit
						9bd83d921c
					
				| @ -7,28 +7,18 @@ | |||||||
| 	<name>logmdcndc</name> | 	<name>logmdcndc</name> | ||||||
| 	<description>tutorial on logging with MDC and NDC</description> | 	<description>tutorial on logging with MDC and NDC</description> | ||||||
| 	 | 	 | ||||||
|     <parent> |  | ||||||
|         <groupId>org.springframework.boot</groupId> |  | ||||||
|         <artifactId>spring-boot-starter-parent</artifactId> |  | ||||||
|         <version>1.4.1.RELEASE</version> |  | ||||||
|     </parent> |  | ||||||
| 
 |  | ||||||
| 	<dependencies> | 	<dependencies> | ||||||
| 
 | 	 | ||||||
|         <dependency> | 	    <dependency> | ||||||
|             <groupId>org.springframework.boot</groupId> | 	        <groupId>org.springframework</groupId> | ||||||
|             <artifactId>spring-boot-starter-web</artifactId> | 	        <artifactId>spring-context</artifactId> | ||||||
|         </dependency> | 	        <version>4.3.3.RELEASE</version> | ||||||
|         <dependency> | 	    </dependency> | ||||||
|             <groupId>org.springframework.boot</groupId> | 	    <dependency> | ||||||
|             <artifactId>spring-boot-starter-test</artifactId> | 	        <groupId>org.springframework</groupId> | ||||||
|             <scope>test</scope> | 	        <artifactId>spring-webmvc</artifactId> | ||||||
|         </dependency> | 	        <version>4.3.3.RELEASE</version> | ||||||
|         <dependency> | 	    </dependency>	     | ||||||
|             <groupId>com.jayway.jsonpath</groupId> |  | ||||||
|             <artifactId>json-path</artifactId> |  | ||||||
|             <scope>test</scope> |  | ||||||
|         </dependency>	 |  | ||||||
| 	 | 	 | ||||||
| 		<!--log4j dependencies --> | 		<!--log4j dependencies --> | ||||||
| 		<dependency> | 		<dependency> | ||||||
|  | |||||||
| @ -2,6 +2,8 @@ package com.baeldung.mdc; | |||||||
| 
 | 
 | ||||||
| public interface BusinessService { | public interface BusinessService { | ||||||
| 
 | 
 | ||||||
| 	boolean transfer(Long amount); | 	/** Sample service transferring a given amount of money.  | ||||||
|  | 	 * @return {@code true} when the transfer complete successfully, {@code false} otherwise. */ | ||||||
|  | 	boolean transfer(long amount); | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,15 +1,19 @@ | |||||||
| package com.baeldung.mdc; | package com.baeldung.mdc; | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * A fake {@link BusinessService} simulating an actual one. | ||||||
|  |  */ | ||||||
| public class DefaultBusinessService implements BusinessService { | public class DefaultBusinessService implements BusinessService { | ||||||
| 
 | 
 | ||||||
| 	@Override | 	public boolean transfer(long amount) { | ||||||
| 	public boolean transfer(Long amount) { |  | ||||||
| 		try { | 		try { | ||||||
| 			Thread.sleep((long) (Math.random()*1000)); | 			// let's pause randomly to properly simulate an actual system.  | ||||||
|  | 			Thread.sleep((long) (500 + Math.random()*500)); | ||||||
| 		} catch (InterruptedException e) { | 		} catch (InterruptedException e) { | ||||||
| 			// should not happen | 			// should never happen | ||||||
| 		} | 		} | ||||||
| 		return Math.random() >= 0.5; | 		// let's simulate both failing and successful transfers  | ||||||
|  | 		return Math.random() >= 0.25; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -9,21 +9,20 @@ public abstract class DelegateBusiness { | |||||||
| 		this.delegate = delegate; | 		this.delegate = delegate; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 
 |  | ||||||
| 	public DelegateBusiness() { | 	public DelegateBusiness() { | ||||||
| 		this( new DefaultBusinessService() ); | 		this( new DefaultBusinessService() ); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public boolean transfer(Long amount) { | 	public boolean transfer(long amount) { | ||||||
| 		preTransfer(); | 		preTransfer(amount); | ||||||
| 		boolean outcome = delegate.transfer(amount); | 		boolean outcome = delegate.transfer(amount); | ||||||
| 		postTransfer(outcome); | 		postTransfer(amount, outcome); | ||||||
| 		return outcome; | 		return outcome; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	abstract protected void postTransfer(boolean outcome); | 	abstract protected void postTransfer(long amount, boolean outcome); | ||||||
| 
 | 
 | ||||||
| 	abstract protected void preTransfer(); | 	abstract protected void preTransfer(long amount); | ||||||
| 	 | 	 | ||||||
| 	 | 	 | ||||||
| 	 | 	 | ||||||
|  | |||||||
| @ -1,46 +1,25 @@ | |||||||
| package com.baeldung.mdc; | package com.baeldung.mdc; | ||||||
| 
 | 
 | ||||||
| import java.util.concurrent.Callable; |  | ||||||
| import java.util.concurrent.ExecutorService; | import java.util.concurrent.ExecutorService; | ||||||
| import java.util.concurrent.Executors; | import java.util.concurrent.Executors; | ||||||
| 
 | 
 | ||||||
| import org.apache.log4j.MDC; | import org.apache.log4j.Logger; | ||||||
| 
 | 
 | ||||||
| import com.baeldung.mdc.log4j.Log4jBusinessService; | import com.baeldung.mdc.log4j.Log4JRunnable; | ||||||
| 
 | 
 | ||||||
| public class GenericApp { | public class GenericApp { | ||||||
|  | 		 | ||||||
| 	public static void main(String[] args) { | 	public static void main(String[] args) { | ||||||
| 		 | 		 | ||||||
| 		ExecutorService executor = Executors.newFixedThreadPool(3); | 		ExecutorService executor = Executors.newFixedThreadPool(3); | ||||||
| 		TransactionFactory transactionFactory = new TransactionFactory(); | 		TransactionFactory transactionFactory = new TransactionFactory(); | ||||||
| 		 | 		 | ||||||
| 		for(int i=0; i<10; i++){ | 		for(int i=0; i<10; i++){ | ||||||
| 			 | 			final Transaction tx = transactionFactory.newInstance(); | ||||||
| 			TransactionContext tx = transactionFactory.buildTransaction(); | 			executor.submit(new Log4JRunnable(tx)); | ||||||
| 			 |  | ||||||
| 			executor.submit(new Runnable() { |  | ||||||
| 				@Override |  | ||||||
| 				public void run() { |  | ||||||
| 					new DelegateBusiness() { |  | ||||||
| 						 |  | ||||||
| 						@Override |  | ||||||
| 						protected void preTransfer() { |  | ||||||
| 							MDC.put("transaction.id", tx.getTransactionId()); |  | ||||||
| 							MDC.put("transaction.owner", tx.getOwner()); |  | ||||||
| 							MDC.put("transaction.createdAt", tx.getCreatedAt()); |  | ||||||
| 						} |  | ||||||
| 						 |  | ||||||
| 						@Override |  | ||||||
| 						protected void postTransfer(boolean outcome) { |  | ||||||
| 							// TODO Auto-generated method stub |  | ||||||
| 							 |  | ||||||
| 						} |  | ||||||
| 					}.transfer( |  | ||||||
| 							tx.getAmount() |  | ||||||
| 					); |  | ||||||
| 				} |  | ||||||
| 			}); |  | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
|  | 		executor.shutdown(); | ||||||
|  | 				 | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -2,18 +2,18 @@ package com.baeldung.mdc; | |||||||
| 
 | 
 | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
| 
 | 
 | ||||||
| public class TransactionContext { | public class Transaction { | ||||||
| 	 | 	 | ||||||
| 	private String transactionId; | 	private String transactionId; | ||||||
| 	private String owner; | 	private String owner; | ||||||
| 	private Date createdAt; | 	private Date createdAt; | ||||||
| 	private Long amount; | 	private Long amount; | ||||||
| 	 | 	 | ||||||
| 	public TransactionContext(String transactionId, String owner) { | 	public Transaction(String transactionId, String owner, long amount) { | ||||||
| 		this.transactionId = transactionId; | 		this.transactionId = transactionId; | ||||||
| 		this.owner = owner; | 		this.owner = owner; | ||||||
| 		this.createdAt = new Date(); | 		this.createdAt = new Date(); | ||||||
| 		this.amount = (long) (Math.random()*100); | 		this.amount = amount; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public String getOwner() { | 	public String getOwner() { | ||||||
| @ -1,10 +1,20 @@ | |||||||
| package com.baeldung.mdc; | package com.baeldung.mdc; | ||||||
| 
 | 
 | ||||||
|  | import static java.lang.Math.floor; | ||||||
|  | import static java.lang.Math.random; | ||||||
|  | 
 | ||||||
|  | import java.util.UUID; | ||||||
|  | 
 | ||||||
| public class TransactionFactory { | public class TransactionFactory { | ||||||
| 
 | 
 | ||||||
| 	public TransactionContext buildTransaction() { | 	private static final String[] NAMES = {"John", "Susan", "Marc", "Samantha"}; | ||||||
| 		TransactionContext ctx = new TransactionContext("" + Math.random(), "owner" + Math.random()); | 	 | ||||||
| 		return ctx; | 	public Transaction newInstance() { | ||||||
|  | 		String transactionId = UUID.randomUUID().toString(); | ||||||
|  | 		String owner = NAMES[ (int) floor(random()*NAMES.length) ]; | ||||||
|  | 		long amount = (long) (random()*1500 + 500); | ||||||
|  | 		Transaction tx = new Transaction(transactionId, owner, amount); | ||||||
|  | 		return tx; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,22 @@ | |||||||
|  | package com.baeldung.mdc.log4j; | ||||||
|  | 
 | ||||||
|  | import org.apache.logging.log4j.LogManager; | ||||||
|  | import org.apache.logging.log4j.Logger; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.mdc.DelegateBusiness; | ||||||
|  | 
 | ||||||
|  | final class Log4JBusinessService extends DelegateBusiness { | ||||||
|  | 	 | ||||||
|  | 	private static final Logger logger = LogManager.getLogger(); | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	protected void preTransfer(long amount) { | ||||||
|  | 		logger.info("Preparing to transfer {}$."); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	protected void postTransfer(long amount, boolean outcome) { | ||||||
|  | 		logger.info("Has transfer of {}$ completed successfully ? {}."); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | } | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | package com.baeldung.mdc.log4j; | ||||||
|  | 
 | ||||||
|  | import org.apache.log4j.MDC; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.mdc.Transaction; | ||||||
|  | 
 | ||||||
|  | public class Log4JRunnable implements Runnable { | ||||||
|  | 	private final Transaction tx; | ||||||
|  | 
 | ||||||
|  | 	public Log4JRunnable(Transaction tx) { | ||||||
|  | 		this.tx = tx; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void run() { | ||||||
|  | 
 | ||||||
|  | 		MDC.put("transaction.id", tx.getTransactionId()); | ||||||
|  | 		MDC.put("transaction.owner", tx.getOwner()); | ||||||
|  | 		MDC.put("transaction.createdAt", tx.getCreatedAt()); | ||||||
|  | 
 | ||||||
|  | 		new Log4JBusinessService().transfer(tx.getAmount()); | ||||||
|  | 
 | ||||||
|  | 		MDC.clear(); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -1,17 +0,0 @@ | |||||||
| package com.baeldung.mdc.log4j; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| import com.baeldung.mdc.BusinessService; |  | ||||||
| 
 |  | ||||||
| public class Log4jBusinessService implements BusinessService { |  | ||||||
| 	 |  | ||||||
| 	private final static Logger logger = Logger.getLogger(Log4jBusinessService.class); |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	public boolean transfer(Long amount) { |  | ||||||
| 		logger.info("Executing transaction #" + amount ); |  | ||||||
| 		return false; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,17 +0,0 @@ | |||||||
| package com.baeldung.mdc.log4j; |  | ||||||
| 
 |  | ||||||
| public class Log4jDemo { |  | ||||||
| 	 |  | ||||||
| 	public static void main(String[] args) throws InterruptedException { |  | ||||||
| 		Log4jExecutor greeter = new Log4jExecutor(); |  | ||||||
| 		Thread thread1 = new Thread(greeter); |  | ||||||
| 		Thread thread2 = new Thread(greeter); |  | ||||||
| 		 |  | ||||||
| 		thread1.start(); |  | ||||||
| 		thread2.start(); |  | ||||||
| 		 |  | ||||||
| 		thread1.join(); |  | ||||||
| 		thread2.join(); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,21 +0,0 @@ | |||||||
| package com.baeldung.mdc.log4j; |  | ||||||
| 
 |  | ||||||
| import org.apache.log4j.MDC; |  | ||||||
| 
 |  | ||||||
| import com.baeldung.mdc.TransactionContext; |  | ||||||
| import com.baeldung.mdc.TransactionFactory; |  | ||||||
| 
 |  | ||||||
| public class Log4jExecutor implements Runnable { |  | ||||||
| 	 |  | ||||||
| 	public void run() { |  | ||||||
| 
 |  | ||||||
| 		TransactionContext ctx = new TransactionFactory().buildTransaction(); |  | ||||||
| 
 |  | ||||||
| 		MDC.put("transaction.id", ctx.getTransactionId()); |  | ||||||
| 		MDC.put("transaction.owner", ctx.getOwner()); |  | ||||||
| 		MDC.put("transaction.createdAt", ctx.getCreatedAt()); |  | ||||||
| 
 |  | ||||||
| 		new Log4jBusinessService().transfer(ctx.getAmount()); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -0,0 +1,21 @@ | |||||||
|  | package com.baeldung.mdc.log4j2; | ||||||
|  | 
 | ||||||
|  | import org.apache.log4j.Logger; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.mdc.DelegateBusiness; | ||||||
|  | 
 | ||||||
|  | final class Log4J2BusinessService extends DelegateBusiness { | ||||||
|  | 	 | ||||||
|  | 	private Logger logger = Logger.getLogger(Log4J2BusinessService.class); | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	protected void preTransfer(long amount) { | ||||||
|  | 		logger .info("Preparing to transfer " + amount + "$."); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	protected void postTransfer(long amount, boolean outcome) { | ||||||
|  | 		logger.info("Has transfer of " + amount + "$ completed successfully ? " + outcome + "."); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | } | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | package com.baeldung.mdc.log4j2; | ||||||
|  | 
 | ||||||
|  | import org.apache.logging.log4j.ThreadContext; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.mdc.Transaction; | ||||||
|  | 
 | ||||||
|  | final class Log4J2Runnable implements Runnable { | ||||||
|  | 	private final Transaction tx; | ||||||
|  | 
 | ||||||
|  | 	Log4J2Runnable(Transaction tx) { | ||||||
|  | 		this.tx = tx; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void run() { | ||||||
|  | 							 | ||||||
|  | 		ThreadContext.put("transaction.id", tx.getTransactionId()); | ||||||
|  | 		ThreadContext.put("transaction.owner", tx.getOwner()); | ||||||
|  | 		ThreadContext.put("transaction.createdAt", tx.getCreatedAt().toString());		 | ||||||
|  | 		 | ||||||
|  | 		new Log4J2BusinessService().transfer(tx.getAmount()); | ||||||
|  | 		 | ||||||
|  | 		ThreadContext.clearAll(); | ||||||
|  | 							 | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -1,20 +0,0 @@ | |||||||
| package com.baeldung.mdc.log4j2; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import org.apache.logging.log4j.LogManager; |  | ||||||
| import org.apache.logging.log4j.Logger; |  | ||||||
| 
 |  | ||||||
| import com.baeldung.mdc.BusinessService; |  | ||||||
| 
 |  | ||||||
| public class Log4j2BusinessService implements BusinessService { |  | ||||||
| 	 |  | ||||||
| 	private static final Logger logger = LogManager.getLogger(); //Log4j2BusinessService.class); |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	public boolean transfer(Long amount) { |  | ||||||
| 		logger.info("Executing transaction #{}", amount ); |  | ||||||
| 		return false; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,17 +0,0 @@ | |||||||
| package com.baeldung.mdc.log4j2; |  | ||||||
| 
 |  | ||||||
| public class Log4j2Demo { |  | ||||||
| 	 |  | ||||||
| 	public static void main(String[] args) throws InterruptedException { |  | ||||||
| 		Log4j2Executor greeter = new Log4j2Executor(); |  | ||||||
| 		Thread thread1 = new Thread(greeter); |  | ||||||
| 		Thread thread2 = new Thread(greeter); |  | ||||||
| 		 |  | ||||||
| 		thread1.start(); |  | ||||||
| 		thread2.start(); |  | ||||||
| 		 |  | ||||||
| 		thread1.join(); |  | ||||||
| 		thread2.join(); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,21 +0,0 @@ | |||||||
| package com.baeldung.mdc.log4j2; |  | ||||||
| 
 |  | ||||||
| import org.apache.logging.log4j.ThreadContext; |  | ||||||
| 
 |  | ||||||
| import com.baeldung.mdc.TransactionContext; |  | ||||||
| import com.baeldung.mdc.TransactionFactory; |  | ||||||
| 
 |  | ||||||
| public class Log4j2Executor implements Runnable { |  | ||||||
| 	 |  | ||||||
| 	public void run() { |  | ||||||
| 
 |  | ||||||
| 		TransactionContext ctx = new TransactionFactory().buildTransaction(); |  | ||||||
| 		 |  | ||||||
| 		ThreadContext.put("transaction.id", ctx.getTransactionId()); |  | ||||||
| 		ThreadContext.put("transaction.owner", ctx.getOwner()); |  | ||||||
| 		ThreadContext.put("transaction.createdAt", ctx.getCreatedAt().toString()); |  | ||||||
| 
 |  | ||||||
| 		new Log4j2BusinessService().transfer(ctx.getAmount()); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,18 +0,0 @@ | |||||||
| package com.baeldung.mdc.logback; |  | ||||||
| 
 |  | ||||||
| import org.slf4j.Logger; |  | ||||||
| import org.slf4j.LoggerFactory; |  | ||||||
| 
 |  | ||||||
| import com.baeldung.mdc.BusinessService; |  | ||||||
| 
 |  | ||||||
| public class LogbackBusinessService implements BusinessService { |  | ||||||
| 
 |  | ||||||
| 	private static final Logger logger = LoggerFactory.getLogger(LogbackBusinessService.class); |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	public boolean transfer(Long amount) { |  | ||||||
| 		logger.info("Executing transaction #{}", amount); |  | ||||||
| 		return false; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,17 +0,0 @@ | |||||||
| package com.baeldung.mdc.logback; |  | ||||||
| 
 |  | ||||||
| public class LogbackDemo { |  | ||||||
| 	 |  | ||||||
| 	public static void main(String[] args) throws InterruptedException { |  | ||||||
| 		LogbackExecutor greeter = new LogbackExecutor(); |  | ||||||
| 		Thread thread1 = new Thread(greeter); |  | ||||||
| 		Thread thread2 = new Thread(greeter); |  | ||||||
| 		 |  | ||||||
| 		thread1.start(); |  | ||||||
| 		thread2.start(); |  | ||||||
| 		 |  | ||||||
| 		thread1.join(); |  | ||||||
| 		thread2.join(); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,23 +0,0 @@ | |||||||
| package com.baeldung.mdc.logback; |  | ||||||
| 
 |  | ||||||
| import org.slf4j.MDC; |  | ||||||
| 
 |  | ||||||
| import com.baeldung.mdc.TransactionContext; |  | ||||||
| import com.baeldung.mdc.TransactionFactory; |  | ||||||
| 
 |  | ||||||
| public class LogbackExecutor implements Runnable { |  | ||||||
| 
 |  | ||||||
| 	public void run() { |  | ||||||
| 
 |  | ||||||
| 		TransactionContext ctx = new TransactionFactory().buildTransaction(); |  | ||||||
| 
 |  | ||||||
| 		MDC.put("transaction.id", ctx.getTransactionId()); |  | ||||||
| 		MDC.put("transaction.owner", ctx.getOwner()); |  | ||||||
| 		MDC.put("transaction.createdAt", ctx.getCreatedAt().toString()); |  | ||||||
| 
 |  | ||||||
| 		new LogbackBusinessService().transfer(ctx.getAmount()); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -0,0 +1,22 @@ | |||||||
|  | package com.baeldung.mdc.slf4j; | ||||||
|  | 
 | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.mdc.DelegateBusiness; | ||||||
|  | 
 | ||||||
|  | final class Slf4jBusinessService extends DelegateBusiness { | ||||||
|  | 	 | ||||||
|  | 	private static final Logger logger = LoggerFactory.getLogger(Slf4jBusinessService.class); | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	protected void preTransfer(long amount) { | ||||||
|  | 		logger.info("Preparing to transfer " + amount + "$."); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	protected void postTransfer(long amount, boolean outcome) { | ||||||
|  | 		logger.info("Has transfer of " + amount + "$ completed successfully ? " + outcome + "."); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | } | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | package com.baeldung.mdc.slf4j; | ||||||
|  | 
 | ||||||
|  | import org.slf4j.MDC; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.mdc.Transaction; | ||||||
|  | 
 | ||||||
|  | final class Slf4jRunnable implements Runnable { | ||||||
|  | 	private final Transaction tx; | ||||||
|  | 
 | ||||||
|  | 	Slf4jRunnable(Transaction tx) { | ||||||
|  | 		this.tx = tx; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void run() { | ||||||
|  | 							 | ||||||
|  | 		MDC.put("transaction.id", tx.getTransactionId()); | ||||||
|  | 		MDC.put("transaction.owner", tx.getOwner()); | ||||||
|  | 		MDC.put("transaction.createdAt", tx.getCreatedAt().toString());		 | ||||||
|  | 		 | ||||||
|  | 		new Slf4jBusinessService().transfer(tx.getAmount()); | ||||||
|  | 		 | ||||||
|  | 		MDC.clear(); | ||||||
|  | 							 | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -1,12 +0,0 @@ | |||||||
| package com.baeldung.web; |  | ||||||
| 
 |  | ||||||
| import org.springframework.boot.SpringApplication; |  | ||||||
| import org.springframework.boot.autoconfigure.SpringBootApplication; |  | ||||||
| 
 |  | ||||||
| @SpringBootApplication |  | ||||||
| public class Application { |  | ||||||
| 
 |  | ||||||
|     public static void main(String[] args) { |  | ||||||
|         SpringApplication.run(Application.class, args); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,18 +0,0 @@ | |||||||
| package com.baeldung.web; |  | ||||||
| 
 |  | ||||||
| import java.util.concurrent.atomic.AtomicLong; |  | ||||||
| 
 |  | ||||||
| import org.springframework.web.bind.annotation.GetMapping; |  | ||||||
| import org.springframework.web.bind.annotation.RequestBody; |  | ||||||
| import org.springframework.web.bind.annotation.RequestMapping; |  | ||||||
| import org.springframework.web.bind.annotation.RequestParam; |  | ||||||
| import org.springframework.web.bind.annotation.RestController; |  | ||||||
| 
 |  | ||||||
| @RestController |  | ||||||
| public class GreetingController { |  | ||||||
| 
 |  | ||||||
|     @GetMapping("/echo") |  | ||||||
|     public String echo(@RequestBody String body) { |  | ||||||
|         return body; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -2,11 +2,13 @@ log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender | |||||||
| log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout | log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout | ||||||
| 
 | 
 | ||||||
| log4j.appender.file=org.apache.log4j.FileAppender | log4j.appender.file=org.apache.log4j.FileAppender | ||||||
| log4j.appender.file.File=/tmp/$X{transaction.owner} | log4j.appender.file.File=/tmp/baeldung.log | ||||||
| log4j.appender.file.layout=org.apache.log4j.PatternLayout | log4j.appender.file.layout=org.apache.log4j.PatternLayout | ||||||
| 
 | 
 | ||||||
| #note the %X{userName} - this is how you fetch data from Mapped Diagnostic Context (MDC) | #note the %X{userName} - this is how you fetch data from Mapped Diagnostic Context (MDC) | ||||||
| log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %5p %c %x - %m - owner=%X{transaction.owner} creation=%X{transaction.createdAt}%n | #log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %5p %c %x - %m - owner=%X{transaction.owner} creation=%X{transaction.createdAt}%n | ||||||
| log4j.appender.file.layout.ConversionPattern=%-4r [%t] %5p %c %x - %m - owner=%X{transaction.owner} creation=%X{transaction.createdAt}%n | #log4j.appender.file.layout.ConversionPattern=%-4r [%t] %5p %c %x - %m - owner=%X{transaction.owner} creation=%X{transaction.createdAt}%n | ||||||
|  | log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %5p %c %x - %m%n | ||||||
|  | log4j.appender.file.layout.ConversionPattern=%-4r [%t] %5p %c %x - %m%n | ||||||
| 
 | 
 | ||||||
| log4j.rootLogger = ALL, consoleAppender, file | log4j.rootLogger = TRACE, consoleAppender, file | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user