Applied formatting as defined in the rules.
This commit is contained in:
parent
dd1679f7b0
commit
d0e95dfbdd
@ -6,53 +6,53 @@
|
|||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<name>logmdcndc</name>
|
<name>logmdcndc</name>
|
||||||
<description>tutorial on logging with MDC and NDC</description>
|
<description>tutorial on logging with MDC and NDC</description>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-context</artifactId>
|
<artifactId>spring-context</artifactId>
|
||||||
<version>4.3.3.RELEASE</version>
|
<version>4.3.3.RELEASE</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-webmvc</artifactId>
|
<artifactId>spring-webmvc</artifactId>
|
||||||
<version>4.3.3.RELEASE</version>
|
<version>4.3.3.RELEASE</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--log4j dependencies -->
|
<!--log4j dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>log4j</groupId>
|
<groupId>log4j</groupId>
|
||||||
<artifactId>log4j</artifactId>
|
<artifactId>log4j</artifactId>
|
||||||
<version>1.2.17</version>
|
<version>1.2.17</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--log4j2 dependencies-->
|
<!--log4j2 dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-api</artifactId>
|
<artifactId>log4j-api</artifactId>
|
||||||
<version>2.7</version>
|
<version>2.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-core</artifactId>
|
<artifactId>log4j-core</artifactId>
|
||||||
<version>2.7</version>
|
<version>2.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--disruptor for log4j2 async logging-->
|
<!--disruptor for log4j2 async logging -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.lmax</groupId>
|
<groupId>com.lmax</groupId>
|
||||||
<artifactId>disruptor</artifactId>
|
<artifactId>disruptor</artifactId>
|
||||||
<version>3.3.4</version>
|
<version>3.3.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--logback dependencies-->
|
<!--logback dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ch.qos.logback</groupId>
|
<groupId>ch.qos.logback</groupId>
|
||||||
<artifactId>logback-classic</artifactId>
|
<artifactId>logback-classic</artifactId>
|
||||||
<version>1.1.7</version>
|
<version>1.1.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -6,20 +6,27 @@ import java.util.concurrent.Executors;
|
|||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import com.baeldung.mdc.log4j.Log4JRunnable;
|
import com.baeldung.mdc.log4j.Log4JRunnable;
|
||||||
|
import com.baeldung.mdc.log4j2.Log4J2Runnable;
|
||||||
|
import com.baeldung.mdc.slf4j.Slf4jRunnable;
|
||||||
|
|
||||||
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();
|
final Transaction tx = transactionFactory.newInstance();
|
||||||
executor.submit(new Log4JRunnable(tx));
|
|
||||||
}
|
//Runnable task = new Log4JRunnable(tx);
|
||||||
|
//Runnable task = new Log4J2Runnable(tx);
|
||||||
executor.shutdown();
|
Runnable task = new Slf4jRunnable(tx);
|
||||||
|
|
||||||
}
|
executor.submit(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
executor.shutdown();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,9 +8,10 @@ import java.util.UUID;
|
|||||||
public class TransactionFactory {
|
public class TransactionFactory {
|
||||||
|
|
||||||
private static final String[] NAMES = {"John", "Susan", "Marc", "Samantha"};
|
private static final String[] NAMES = {"John", "Susan", "Marc", "Samantha"};
|
||||||
|
private static long nextId = 1;
|
||||||
|
|
||||||
public Transaction newInstance() {
|
public Transaction newInstance() {
|
||||||
String transactionId = UUID.randomUUID().toString();
|
String transactionId = String.valueOf( nextId++ );
|
||||||
String owner = NAMES[ (int) floor(random()*NAMES.length) ];
|
String owner = NAMES[ (int) floor(random()*NAMES.length) ];
|
||||||
long amount = (long) (random()*1500 + 500);
|
long amount = (long) (random()*1500 + 500);
|
||||||
Transaction tx = new Transaction(transactionId, owner, amount);
|
Transaction tx = new Transaction(transactionId, owner, amount);
|
||||||
|
@ -1,22 +1,21 @@
|
|||||||
package com.baeldung.mdc.log4j;
|
package com.baeldung.mdc.log4j;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.log4j.Logger;
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
|
|
||||||
import com.baeldung.mdc.BusinessService;
|
import com.baeldung.mdc.BusinessService;
|
||||||
|
|
||||||
class Log4JBusinessService extends BusinessService {
|
public class Log4JBusinessService extends BusinessService {
|
||||||
|
|
||||||
private static final Logger logger = LogManager.getLogger();
|
|
||||||
|
|
||||||
@Override
|
private Logger logger = Logger.getLogger(Log4JBusinessService.class);
|
||||||
protected void beforeTransfer(long amount) {
|
|
||||||
logger.info("Preparing to transfer {}$.");
|
@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 ? {}.");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,25 +1,29 @@
|
|||||||
package com.baeldung.mdc.log4j;
|
package com.baeldung.mdc.log4j;
|
||||||
|
|
||||||
import org.apache.log4j.MDC;
|
import org.apache.log4j.MDC;
|
||||||
|
import org.apache.logging.log4j.ThreadContext;
|
||||||
|
|
||||||
import com.baeldung.mdc.Transaction;
|
import com.baeldung.mdc.Transaction;
|
||||||
|
import com.baeldung.mdc.log4j2.Log4J2BusinessService;
|
||||||
|
|
||||||
public class Log4JRunnable implements Runnable {
|
public class Log4JRunnable implements Runnable {
|
||||||
private final Transaction tx;
|
|
||||||
|
|
||||||
public Log4JRunnable(Transaction tx) {
|
private Transaction tx;
|
||||||
this.tx = tx;
|
private static Log4JBusinessService log4jBusinessService = new Log4JBusinessService();
|
||||||
}
|
|
||||||
|
|
||||||
public void run() {
|
public Log4JRunnable(Transaction tx) {
|
||||||
|
this.tx = tx;
|
||||||
|
}
|
||||||
|
|
||||||
MDC.put("transaction.id", tx.getTransactionId());
|
public void run() {
|
||||||
MDC.put("transaction.owner", tx.getOwner());
|
|
||||||
MDC.put("transaction.createdAt", tx.getCreatedAt());
|
|
||||||
|
|
||||||
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();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,21 +1,22 @@
|
|||||||
package com.baeldung.mdc.log4j2;
|
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;
|
import com.baeldung.mdc.BusinessService;
|
||||||
|
|
||||||
final class Log4J2BusinessService extends BusinessService {
|
public class Log4J2BusinessService extends BusinessService {
|
||||||
|
|
||||||
private Logger logger = Logger.getLogger(Log4J2BusinessService.class);
|
|
||||||
|
|
||||||
@Override
|
private static final Logger logger = LogManager.getLogger();
|
||||||
protected void beforeTransfer(long amount) {
|
|
||||||
logger .info("Preparing to transfer " + amount + "$.");
|
@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 + ".");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -4,22 +4,24 @@ import org.apache.logging.log4j.ThreadContext;
|
|||||||
|
|
||||||
import com.baeldung.mdc.Transaction;
|
import com.baeldung.mdc.Transaction;
|
||||||
|
|
||||||
final class Log4J2Runnable implements Runnable {
|
public class Log4J2Runnable implements Runnable {
|
||||||
private final Transaction tx;
|
private final Transaction tx;
|
||||||
|
private Log4J2BusinessService log4j2BusinessService = new Log4J2BusinessService();
|
||||||
|
|
||||||
Log4J2Runnable(Transaction tx) {
|
public Log4J2Runnable(Transaction tx) {
|
||||||
this.tx = tx;
|
this.tx = tx;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
||||||
ThreadContext.put("transaction.id", tx.getTransactionId());
|
ThreadContext.put("transaction.id", tx.getTransactionId());
|
||||||
ThreadContext.put("transaction.owner", tx.getOwner());
|
ThreadContext.put("transaction.id", tx.getTransactionId());
|
||||||
ThreadContext.put("transaction.createdAt", tx.getCreatedAt().toString());
|
ThreadContext.put("transaction.owner", tx.getOwner());
|
||||||
|
ThreadContext.put("transaction.createdAt", tx.getCreatedAt().toString());
|
||||||
new Log4J2BusinessService().transfer(tx.getAmount());
|
|
||||||
|
log4j2BusinessService.transfer(tx.getAmount());
|
||||||
ThreadContext.clearAll();
|
|
||||||
|
ThreadContext.clearAll();
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
}
|
@ -6,17 +6,17 @@ import org.slf4j.LoggerFactory;
|
|||||||
import com.baeldung.mdc.BusinessService;
|
import com.baeldung.mdc.BusinessService;
|
||||||
|
|
||||||
final class Slf4jBusinessService extends BusinessService {
|
final class Slf4jBusinessService extends BusinessService {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(Slf4jBusinessService.class);
|
|
||||||
|
|
||||||
@Override
|
private static final Logger logger = LoggerFactory.getLogger(Slf4jBusinessService.class);
|
||||||
protected void beforeTransfer(long amount) {
|
|
||||||
logger.info("Preparing to transfer " + amount + "$.");
|
@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 + ".");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -4,22 +4,22 @@ import org.slf4j.MDC;
|
|||||||
|
|
||||||
import com.baeldung.mdc.Transaction;
|
import com.baeldung.mdc.Transaction;
|
||||||
|
|
||||||
final class Slf4jRunnable implements Runnable {
|
public class Slf4jRunnable implements Runnable {
|
||||||
private final Transaction tx;
|
private final Transaction tx;
|
||||||
|
|
||||||
Slf4jRunnable(Transaction tx) {
|
public Slf4jRunnable(Transaction tx) {
|
||||||
this.tx = tx;
|
this.tx = tx;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
||||||
MDC.put("transaction.id", tx.getTransactionId());
|
MDC.put("transaction.id", tx.getTransactionId());
|
||||||
MDC.put("transaction.owner", tx.getOwner());
|
MDC.put("transaction.owner", tx.getOwner());
|
||||||
MDC.put("transaction.createdAt", tx.getCreatedAt().toString());
|
MDC.put("transaction.createdAt", tx.getCreatedAt().toString());
|
||||||
|
|
||||||
new Slf4jBusinessService().transfer(tx.getAmount());
|
new Slf4jBusinessService().transfer(tx.getAmount());
|
||||||
|
|
||||||
MDC.clear();
|
MDC.clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,14 +1,8 @@
|
|||||||
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
|
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.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)
|
#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{1} %x - %m%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{1} %x - %m - tx.id=%X{transaction.id} tx.owner=%X{transaction.owner}%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 = TRACE, consoleAppender, file
|
log4j.rootLogger = TRACE, consoleAppender
|
@ -1,32 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Configuration status="INFO">
|
<Configuration status="INFO">
|
||||||
<Appenders>
|
<Appenders>
|
||||||
# Console appender
|
<Console name="stdout" target="SYSTEM_OUT">
|
||||||
<Console name="stdout" target="SYSTEM_OUT">
|
<PatternLayout
|
||||||
# Pattern of log message for console appender
|
pattern="%-4r [%t] %5p %c{1} - %m - tx.id=%X{transaction.id} tx.owner=%X{transaction.owner}%n" />
|
||||||
<PatternLayout pattern="Log4j2 - %d{yyyy-MM-dd HH:mm:ss} %p %m owner=%X{transaction.owner} creation=%X{transaction.createdAt}%n"/>
|
</Console>
|
||||||
</Console>
|
</Appenders>
|
||||||
|
|
||||||
# File appender
|
<Loggers>
|
||||||
<!--
|
<Logger name="com.baeldung.log4j2" level="TRACE" />
|
||||||
|
|
||||||
<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>
|
<AsyncRoot level="DEBUG">
|
||||||
# Override log level for specified package
|
<AppenderRef ref="stdout" />
|
||||||
<Logger name="com.baeldung.log4j2" level="TRACE"/>
|
</AsyncRoot>
|
||||||
|
</Loggers>
|
||||||
<AsyncRoot level="DEBUG">
|
|
||||||
<AppenderRef ref="stdout"/>
|
|
||||||
<!--
|
|
||||||
|
|
||||||
<AppenderRef ref="fout"/>
|
|
||||||
-->
|
|
||||||
</AsyncRoot>
|
|
||||||
</Loggers>
|
|
||||||
</Configuration>
|
</Configuration>
|
@ -1,9 +1,8 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
|
|
||||||
# Console appender
|
|
||||||
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<pattern>logback %d{yyyy-MM-dd HH:mm:ss} %p %m %X{transaction.owner} %X{transaction.createdAt} %n</pattern>
|
<pattern>%-4r [%t] %5p %c{1} - %m - tx.id=%X{transaction.id} tx.owner=%X{transaction.owner}%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user