diff --git a/log-mdc-ndc/pom.xml b/log-mdc-ndc/pom.xml
index 8e9d52a750..927473ad4e 100644
--- a/log-mdc-ndc/pom.xml
+++ b/log-mdc-ndc/pom.xml
@@ -6,53 +6,53 @@
0.0.1-SNAPSHOT
logmdcndc
tutorial on logging with MDC and NDC
-
+
-
-
- org.springframework
- spring-context
- 4.3.3.RELEASE
-
-
- org.springframework
- spring-webmvc
- 4.3.3.RELEASE
-
-
+
+
+ org.springframework
+ spring-context
+ 4.3.3.RELEASE
+
+
+ org.springframework
+ spring-webmvc
+ 4.3.3.RELEASE
+
+
log4j
log4j
1.2.17
-
-
-
- org.apache.logging.log4j
- log4j-api
- 2.7
-
-
- org.apache.logging.log4j
- log4j-core
- 2.7
-
-
-
-
- com.lmax
- disruptor
- 3.3.4
-
-
-
-
- ch.qos.logback
- logback-classic
- 1.1.7
-
-
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.7
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.7
+
+
+
+
+ com.lmax
+ disruptor
+ 3.3.4
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.1.7
+
+
\ No newline at end of file
diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/GenericApp.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/GenericApp.java
index 3652032e0e..9f08e33455 100644
--- a/log-mdc-ndc/src/main/java/com/baeldung/mdc/GenericApp.java
+++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/GenericApp.java
@@ -6,20 +6,27 @@ import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
import com.baeldung.mdc.log4j.Log4JRunnable;
+import com.baeldung.mdc.log4j2.Log4J2Runnable;
+import com.baeldung.mdc.slf4j.Slf4jRunnable;
public class GenericApp {
-
- public static void main(String[] args) {
-
- ExecutorService executor = Executors.newFixedThreadPool(3);
- TransactionFactory transactionFactory = new TransactionFactory();
-
- for(int i=0; i<10; i++){
- final Transaction tx = transactionFactory.newInstance();
- executor.submit(new Log4JRunnable(tx));
- }
-
- executor.shutdown();
-
- }
+
+ public static void main(String[] args) {
+
+ ExecutorService executor = Executors.newFixedThreadPool(3);
+ TransactionFactory transactionFactory = new TransactionFactory();
+
+ for (int i = 0; i < 10; i++) {
+ final Transaction tx = transactionFactory.newInstance();
+
+ //Runnable task = new Log4JRunnable(tx);
+ //Runnable task = new Log4J2Runnable(tx);
+ Runnable task = new Slf4jRunnable(tx);
+
+ executor.submit(task);
+ }
+
+ executor.shutdown();
+
+ }
}
diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/TransactionFactory.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/TransactionFactory.java
index 26039ba1d4..2ae0b3d3f5 100644
--- a/log-mdc-ndc/src/main/java/com/baeldung/mdc/TransactionFactory.java
+++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/TransactionFactory.java
@@ -8,9 +8,10 @@ import java.util.UUID;
public class TransactionFactory {
private static final String[] NAMES = {"John", "Susan", "Marc", "Samantha"};
+ private static long nextId = 1;
public Transaction newInstance() {
- String transactionId = UUID.randomUUID().toString();
+ String transactionId = String.valueOf( nextId++ );
String owner = NAMES[ (int) floor(random()*NAMES.length) ];
long amount = (long) (random()*1500 + 500);
Transaction tx = new Transaction(transactionId, owner, amount);
diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4JBusinessService.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4JBusinessService.java
index c7d5c6904a..26633e229e 100644
--- a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4JBusinessService.java
+++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4JBusinessService.java
@@ -1,22 +1,21 @@
package com.baeldung.mdc.log4j;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.apache.log4j.Logger;
import com.baeldung.mdc.BusinessService;
-class Log4JBusinessService extends BusinessService {
-
- private static final Logger logger = LogManager.getLogger();
+public class Log4JBusinessService extends BusinessService {
- @Override
- protected void beforeTransfer(long amount) {
- logger.info("Preparing to transfer {}$.");
- }
+ private Logger logger = Logger.getLogger(Log4JBusinessService.class);
+
+ @Override
+ protected void beforeTransfer(long amount) {
+ logger.info("Preparing to transfer " + amount + "$.");
+ }
+
+ @Override
+ protected void afterTransfer(long amount, boolean outcome) {
+ logger.info("Has transfer of " + amount + "$ completed successfully ? " + outcome + ".");
+ }
- @Override
- protected void afterTransfer(long amount, boolean outcome) {
- logger.info("Has transfer of {}$ completed successfully ? {}.");
- }
-
}
\ No newline at end of file
diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4JRunnable.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4JRunnable.java
index 2aeb75f95a..ce5d97eddf 100644
--- a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4JRunnable.java
+++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4JRunnable.java
@@ -1,25 +1,29 @@
package com.baeldung.mdc.log4j;
import org.apache.log4j.MDC;
+import org.apache.logging.log4j.ThreadContext;
import com.baeldung.mdc.Transaction;
+import com.baeldung.mdc.log4j2.Log4J2BusinessService;
public class Log4JRunnable implements Runnable {
- private final Transaction tx;
- public Log4JRunnable(Transaction tx) {
- this.tx = tx;
- }
+ private Transaction tx;
+ private static Log4JBusinessService log4jBusinessService = new Log4JBusinessService();
- public void run() {
+ public Log4JRunnable(Transaction tx) {
+ this.tx = tx;
+ }
- MDC.put("transaction.id", tx.getTransactionId());
- MDC.put("transaction.owner", tx.getOwner());
- MDC.put("transaction.createdAt", tx.getCreatedAt());
+ public void run() {
- new Log4JBusinessService().transfer(tx.getAmount());
+ MDC.put("transaction.id", tx.getTransactionId());
+ MDC.put("transaction.owner", tx.getOwner());
+ MDC.put("transaction.createdAt", tx.getCreatedAt());
- MDC.clear();
+ log4jBusinessService.transfer(tx.getAmount());
- }
+ MDC.clear();
+
+ }
}
\ No newline at end of file
diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4J2BusinessService.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4J2BusinessService.java
index 1000b7edc2..cbfbc5b8a5 100644
--- a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4J2BusinessService.java
+++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4J2BusinessService.java
@@ -1,21 +1,22 @@
package com.baeldung.mdc.log4j2;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import com.baeldung.mdc.BusinessService;
-final class Log4J2BusinessService extends BusinessService {
-
- private Logger logger = Logger.getLogger(Log4J2BusinessService.class);
+public class Log4J2BusinessService extends BusinessService {
- @Override
- protected void beforeTransfer(long amount) {
- logger .info("Preparing to transfer " + amount + "$.");
- }
+ private static final Logger logger = LogManager.getLogger();
+
+ @Override
+ protected void beforeTransfer(long amount) {
+ logger.info("Preparing to transfer {}$.", amount);
+ }
+
+ @Override
+ protected void afterTransfer(long amount, boolean outcome) {
+ logger.info("Has transfer of {}$ completed successfully ? {}.", amount, outcome);
+ }
- @Override
- protected void afterTransfer(long amount, boolean outcome) {
- logger.info("Has transfer of " + amount + "$ completed successfully ? " + outcome + ".");
- }
-
}
\ No newline at end of file
diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4J2Runnable.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4J2Runnable.java
index 32f2161af8..6a3f39ba5b 100644
--- a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4J2Runnable.java
+++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4J2Runnable.java
@@ -4,22 +4,24 @@ import org.apache.logging.log4j.ThreadContext;
import com.baeldung.mdc.Transaction;
-final class Log4J2Runnable implements Runnable {
- private final Transaction tx;
+public class Log4J2Runnable implements Runnable {
+ private final Transaction tx;
+ private Log4J2BusinessService log4j2BusinessService = new Log4J2BusinessService();
- Log4J2Runnable(Transaction tx) {
- this.tx = tx;
- }
+ public 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();
-
- }
+ public void run() {
+
+ ThreadContext.put("transaction.id", tx.getTransactionId());
+ ThreadContext.put("transaction.id", tx.getTransactionId());
+ ThreadContext.put("transaction.owner", tx.getOwner());
+ ThreadContext.put("transaction.createdAt", tx.getCreatedAt().toString());
+
+ log4j2BusinessService.transfer(tx.getAmount());
+
+ ThreadContext.clearAll();
+
+ }
}
\ No newline at end of file
diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/slf4j/Slf4jBusinessService.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/slf4j/Slf4jBusinessService.java
index b241ec4b77..d525965ed5 100644
--- a/log-mdc-ndc/src/main/java/com/baeldung/mdc/slf4j/Slf4jBusinessService.java
+++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/slf4j/Slf4jBusinessService.java
@@ -6,17 +6,17 @@ import org.slf4j.LoggerFactory;
import com.baeldung.mdc.BusinessService;
final class Slf4jBusinessService extends BusinessService {
-
- private static final Logger logger = LoggerFactory.getLogger(Slf4jBusinessService.class);
- @Override
- protected void beforeTransfer(long amount) {
- logger.info("Preparing to transfer " + amount + "$.");
- }
+ private static final Logger logger = LoggerFactory.getLogger(Slf4jBusinessService.class);
+
+ @Override
+ protected void beforeTransfer(long amount) {
+ logger.info("Preparing to transfer {}$.", amount);
+ }
+
+ @Override
+ protected void afterTransfer(long amount, boolean outcome) {
+ logger.info("Has transfer of {}$ completed successfully ? {}.", amount, outcome);
+ }
- @Override
- protected void afterTransfer(long amount, boolean outcome) {
- logger.info("Has transfer of " + amount + "$ completed successfully ? " + outcome + ".");
- }
-
}
\ No newline at end of file
diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/slf4j/Slf4jRunnable.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/slf4j/Slf4jRunnable.java
index 938b18c257..2ef170721c 100644
--- a/log-mdc-ndc/src/main/java/com/baeldung/mdc/slf4j/Slf4jRunnable.java
+++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/slf4j/Slf4jRunnable.java
@@ -4,22 +4,22 @@ import org.slf4j.MDC;
import com.baeldung.mdc.Transaction;
-final class Slf4jRunnable implements Runnable {
- private final Transaction tx;
+public class Slf4jRunnable implements Runnable {
+ private final Transaction tx;
- Slf4jRunnable(Transaction tx) {
- this.tx = tx;
- }
+ public 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();
-
- }
+ 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();
+
+ }
}
\ No newline at end of file
diff --git a/log-mdc-ndc/src/main/resources/log4j.properties b/log-mdc-ndc/src/main/resources/log4j.properties
index 03ae9a0c02..39be027f3f 100644
--- a/log-mdc-ndc/src/main/resources/log4j.properties
+++ b/log-mdc-ndc/src/main/resources/log4j.properties
@@ -1,14 +1,8 @@
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=/tmp/baeldung.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-
#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.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.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %5p %c{1} %x - %m%n
+log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %5p %c{1} %x - %m - tx.id=%X{transaction.id} tx.owner=%X{transaction.owner}%n
-log4j.rootLogger = TRACE, consoleAppender, file
\ No newline at end of file
+log4j.rootLogger = TRACE, consoleAppender
\ No newline at end of file
diff --git a/log-mdc-ndc/src/main/resources/log4j2.xml b/log-mdc-ndc/src/main/resources/log4j2.xml
index f9a2bdcf1a..800cfacafe 100644
--- a/log-mdc-ndc/src/main/resources/log4j2.xml
+++ b/log-mdc-ndc/src/main/resources/log4j2.xml
@@ -1,32 +1,17 @@
-
- # Console appender
-
- # Pattern of log message for console appender
-
-
+
+
+
+
+
- # File appender
-
-
+
+
-
- # Override log level for specified package
-
-
-
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/log-mdc-ndc/src/main/resources/logback.xml b/log-mdc-ndc/src/main/resources/logback.xml
index 7bea9976e7..44d247c87e 100644
--- a/log-mdc-ndc/src/main/resources/logback.xml
+++ b/log-mdc-ndc/src/main/resources/logback.xml
@@ -1,9 +1,8 @@
- # Console appender
- logback %d{yyyy-MM-dd HH:mm:ss} %p %m %X{transaction.owner} %X{transaction.createdAt} %n
+ %-4r [%t] %5p %c{1} - %m - tx.id=%X{transaction.id} tx.owner=%X{transaction.owner}%n