Applied formatting as defined in the rules.

This commit is contained in:
danidemi 2016-11-06 17:39:06 +01:00
parent dd1679f7b0
commit d0e95dfbdd
12 changed files with 166 additions and 174 deletions

View File

@ -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>

View File

@ -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();
}
} }

View File

@ -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);

View File

@ -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 ? {}.");
}
} }

View File

@ -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();
}
} }

View File

@ -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 + ".");
}
} }

View File

@ -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();
}
}
} }

View File

@ -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 + ".");
}
} }

View File

@ -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();
} }
} }

View File

@ -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

View File

@ -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>

View File

@ -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>