Log4J MDC, Log4J2 MDC samples added.
This commit is contained in:
parent
c0ed2e50cb
commit
62de84bb52
13
log-mdc-ndc/README.md
Normal file
13
log-mdc-ndc/README.md
Normal file
@ -0,0 +1,13 @@
|
||||
### Relevant Articles:
|
||||
- TBD
|
||||
|
||||
### References
|
||||
|
||||
_Log4j MDC_
|
||||
* <https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html>
|
||||
* <http://veerasundar.com/blog/2009/10/log4j-mdc-mapped-diagnostic-context-what-and-why/>
|
||||
|
||||
_Log4j2_
|
||||
* <https://logging.apache.org/log4j/2.x/manual/thread-context.html>
|
||||
|
||||
|
39
log-mdc-ndc/pom.xml
Normal file
39
log-mdc-ndc/pom.xml
Normal file
@ -0,0 +1,39 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.baeldug</groupId>
|
||||
<artifactId>logmdcndc</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>logmdcndc</name>
|
||||
<description>tutorial on logging with MDC and NDC</description>
|
||||
|
||||
<dependencies>
|
||||
<!--log4j dependencies -->
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<version>1.2.17</version>
|
||||
</dependency>
|
||||
|
||||
<!--log4j2 dependencies-->
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-api</artifactId>
|
||||
<version>2.7</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-core</artifactId>
|
||||
<version>2.7</version>
|
||||
</dependency>
|
||||
|
||||
<!--disruptor for log4j2 async logging-->
|
||||
<dependency>
|
||||
<groupId>com.lmax</groupId>
|
||||
<artifactId>disruptor</artifactId>
|
||||
<version>3.3.4</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,7 @@
|
||||
package com.baeldung.mdc;
|
||||
|
||||
public interface BusinessService {
|
||||
|
||||
void businessMethod(String transactionId);
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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 );
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
@ -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 );
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
12
log-mdc-ndc/src/main/resources/log4j.properties
Normal file
12
log-mdc-ndc/src/main/resources/log4j.properties
Normal file
@ -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
|
32
log-mdc-ndc/src/main/resources/log4j2.xml
Normal file
32
log-mdc-ndc/src/main/resources/log4j2.xml
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Configuration status="INFO">
|
||||
<Appenders>
|
||||
# Console appender
|
||||
<Console name="stdout" target="SYSTEM_OUT">
|
||||
# Pattern of log message for console appender
|
||||
<PatternLayout pattern="Log4j2 - %d{yyyy-MM-dd HH:mm:ss} %p %m owner=%X{transaction.owner} creation=%X{transaction.createdAt}%n"/>
|
||||
</Console>
|
||||
|
||||
# File appender
|
||||
<!--
|
||||
|
||||
<File name="fout" fileName="log4j/target/baeldung-log4j2.log" immediateFlush="false" append="false">
|
||||
# Pattern of log message for file appender
|
||||
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %p %m%n"/>
|
||||
</File>
|
||||
-->
|
||||
</Appenders>
|
||||
|
||||
<Loggers>
|
||||
# Override log level for specified package
|
||||
<Logger name="com.baeldung.log4j2" level="TRACE"/>
|
||||
|
||||
<AsyncRoot level="DEBUG">
|
||||
<AppenderRef ref="stdout"/>
|
||||
<!--
|
||||
|
||||
<AppenderRef ref="fout"/>
|
||||
-->
|
||||
</AsyncRoot>
|
||||
</Loggers>
|
||||
</Configuration>
|
Loading…
x
Reference in New Issue
Block a user