From 62de84bb5285f1f094837a8319e5d8b27e0a424e Mon Sep 17 00:00:00 2001 From: danidemi Date: Mon, 31 Oct 2016 16:43:48 +0100 Subject: [PATCH] Log4J MDC, Log4J2 MDC samples added. --- log-mdc-ndc/README.md | 13 +++++++ log-mdc-ndc/pom.xml | 39 +++++++++++++++++++ .../com/baeldung/mdc/BusinessService.java | 7 ++++ .../com/baeldung/mdc/TransactionContext.java | 29 ++++++++++++++ .../mdc/log4j/Log4jBusinessService.java | 16 ++++++++ .../com/baeldung/mdc/log4j/Log4jDemo.java | 17 ++++++++ .../com/baeldung/mdc/log4j/Log4jExecutor.java | 23 +++++++++++ .../mdc/log4j2/Log4j2BusinessService.java | 19 +++++++++ .../com/baeldung/mdc/log4j2/Log4j2Demo.java | 17 ++++++++ .../baeldung/mdc/log4j2/Log4j2Executor.java | 22 +++++++++++ .../src/main/resources/log4j.properties | 12 ++++++ log-mdc-ndc/src/main/resources/log4j2.xml | 32 +++++++++++++++ 12 files changed, 246 insertions(+) create mode 100644 log-mdc-ndc/README.md create mode 100644 log-mdc-ndc/pom.xml create mode 100644 log-mdc-ndc/src/main/java/com/baeldung/mdc/BusinessService.java create mode 100644 log-mdc-ndc/src/main/java/com/baeldung/mdc/TransactionContext.java create mode 100644 log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jBusinessService.java create mode 100644 log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jDemo.java create mode 100644 log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jExecutor.java create mode 100644 log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2BusinessService.java create mode 100644 log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2Demo.java create mode 100644 log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2Executor.java create mode 100644 log-mdc-ndc/src/main/resources/log4j.properties create mode 100644 log-mdc-ndc/src/main/resources/log4j2.xml diff --git a/log-mdc-ndc/README.md b/log-mdc-ndc/README.md new file mode 100644 index 0000000000..29b0c95996 --- /dev/null +++ b/log-mdc-ndc/README.md @@ -0,0 +1,13 @@ +### Relevant Articles: +- TBD + +### References + +_Log4j MDC_ +* +* + +_Log4j2_ +* + + diff --git a/log-mdc-ndc/pom.xml b/log-mdc-ndc/pom.xml new file mode 100644 index 0000000000..b82285a283 --- /dev/null +++ b/log-mdc-ndc/pom.xml @@ -0,0 +1,39 @@ + + 4.0.0 + com.baeldug + logmdcndc + 0.0.1-SNAPSHOT + logmdcndc + tutorial on logging with MDC and NDC + + + + + 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 + + + + + \ No newline at end of file diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/BusinessService.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/BusinessService.java new file mode 100644 index 0000000000..dc33580aca --- /dev/null +++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/BusinessService.java @@ -0,0 +1,7 @@ +package com.baeldung.mdc; + +public interface BusinessService { + + void businessMethod(String transactionId); + +} diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/TransactionContext.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/TransactionContext.java new file mode 100644 index 0000000000..f5694d0df0 --- /dev/null +++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/TransactionContext.java @@ -0,0 +1,29 @@ +package com.baeldung.mdc; + +import java.util.Date; + +public class TransactionContext { + + private String transactionId; + private String owner; + private Date createdAt; + + public TransactionContext(String transactionId, String owner) { + this.transactionId = transactionId; + this.owner = owner; + this.createdAt = new Date(); + } + + public String getOwner() { + return owner; + } + + public String getTransactionId() { + return transactionId; + } + + public Date getCreatedAt() { + return createdAt; + } + +} 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 new file mode 100644 index 0000000000..4587f49be4 --- /dev/null +++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jBusinessService.java @@ -0,0 +1,16 @@ +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 void businessMethod(String transactionId) { + logger.info("Executing transaction #" + transactionId ); + } + +} \ No newline at end of file diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jDemo.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jDemo.java new file mode 100644 index 0000000000..de3945020b --- /dev/null +++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jDemo.java @@ -0,0 +1,17 @@ +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(); + } + +} diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jExecutor.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jExecutor.java new file mode 100644 index 0000000000..fb949aa4ef --- /dev/null +++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j/Log4jExecutor.java @@ -0,0 +1,23 @@ +package com.baeldung.mdc.log4j; + +import org.apache.log4j.Logger; +import org.apache.log4j.MDC; + +import com.baeldung.mdc.TransactionContext; + +public class Log4jExecutor implements Runnable { + + public void run() { + + String transactionId = "" + Math.random(); + String owner = "owner" + Math.random(); + TransactionContext ctx = new TransactionContext(transactionId, owner); + + MDC.put("transaction.id", transactionId); + MDC.put("transaction.owner", owner); + MDC.put("transaction.createdAt", ctx.getCreatedAt()); + + new Log4jBusinessService().businessMethod(ctx.getTransactionId()); + } + +} 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 new file mode 100644 index 0000000000..e9e0461a0a --- /dev/null +++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2BusinessService.java @@ -0,0 +1,19 @@ +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 void businessMethod(String transactionId) { + logger.info("Executing transaction #{}", transactionId ); + } + +} \ No newline at end of file diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2Demo.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2Demo.java new file mode 100644 index 0000000000..0dec8a9a18 --- /dev/null +++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2Demo.java @@ -0,0 +1,17 @@ +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(); + } + +} diff --git a/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2Executor.java b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2Executor.java new file mode 100644 index 0000000000..b206638ceb --- /dev/null +++ b/log-mdc-ndc/src/main/java/com/baeldung/mdc/log4j2/Log4j2Executor.java @@ -0,0 +1,22 @@ +package com.baeldung.mdc.log4j2; + +import org.apache.logging.log4j.ThreadContext; + +import com.baeldung.mdc.TransactionContext; + +public class Log4j2Executor implements Runnable { + + public void run() { + + String transactionId = "" + Math.random(); + String owner = "owner" + Math.random(); + TransactionContext ctx = new TransactionContext(transactionId, owner); + + ThreadContext.put("transaction.id", transactionId); + ThreadContext.put("transaction.owner", owner); + ThreadContext.put("transaction.createdAt", ctx.getCreatedAt().toString()); + + new Log4j2BusinessService().businessMethod(ctx.getTransactionId()); + } + +} diff --git a/log-mdc-ndc/src/main/resources/log4j.properties b/log-mdc-ndc/src/main/resources/log4j.properties new file mode 100644 index 0000000000..dac8abf6b8 --- /dev/null +++ b/log-mdc-ndc/src/main/resources/log4j.properties @@ -0,0 +1,12 @@ +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/$X{transaction.owner} +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.rootLogger = ALL, consoleAppender, file \ 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 new file mode 100644 index 0000000000..f9a2bdcf1a --- /dev/null +++ b/log-mdc-ndc/src/main/resources/log4j2.xml @@ -0,0 +1,32 @@ + + + + # Console appender + + # Pattern of log message for console appender + + + + # File appender + + + + + # Override log level for specified package + + + + + + + + \ No newline at end of file