package org.activiti.engine.test.logging.mdc;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.test.Deployment;
import org.apache.log4j.Appender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
public class MDCLoggingTest extends PluggableActivitiTestCase {
MemoryLogAppender console = new MemoryLogAppender();
List<Appender> appenders = null;
private void setCustomLogger() {
String PATTERN = "Modified Log *** ProcessDefinitionId=%X{mdcProcessDefinitionID} executionId=%X{mdcExecutionId} mdcProcessInstanceID=%X{mdcProcessInstanceID} mdcBusinessKey=%X{mdcBusinessKey} mdcTaskId=%X{mdcTaskId} %m%n";
console.setLayout(new PatternLayout(PATTERN));
console.setThreshold(Level.INFO);
console.activateOptions();
console.setName("MemoryAppender");
appenders = new ArrayList<Appender>();
Enumeration<?> appendersEnum = Logger.getRootLogger().getAllAppenders();
while (appendersEnum.hasMoreElements()) {
Appender object = (Appender ) appendersEnum.nextElement();
appenders.add(object);
}
removeAppenders();
Logger.getRootLogger().addAppender(console);
}
private void removeAppenders() {
Enumeration< ? > appendersEnum = Logger.getRootLogger().getAllAppenders();
while (appendersEnum.hasMoreElements()) {
Appender object = (Appender ) appendersEnum.nextElement();
Logger.getRootLogger().removeAppender(object);
}
}
private void restoreLoggers() {
removeAppenders();
for (Appender appender:appenders) {
Logger.getRootLogger().addAppender(appender);
}
}
@Deployment
public void testLogger() {
setCustomLogger();
try {
runtimeService.startProcessInstanceByKey("testLoggerProcess");
fail("Expected exception");
} catch (Exception e) {
// expected exception
}
String messages = console.toString();
assertTrue(messages.contains(
"ProcessDefinitionId=" + TestService.processDefinitionId));
assertTrue(messages.contains(
"executionId=" + TestService.executionId));
assertTrue(messages.contains(
"mdcProcessInstanceID=" + TestService.processInstanceId));
assertTrue(messages.contains(
"mdcBusinessKey="
+ (TestService.businessKey == null ? ""
: TestService.businessKey)));
console.clear();
restoreLoggers();
try {
runtimeService.startProcessInstanceByKey("testLoggerProcess");
fail("Expected exception");
} catch (Exception e) {
// expected exception
}
assertFalse(console.toString().contains(
"ProcessDefinitionId=" + TestService.processDefinitionId));
}
}