public class LogbackHelperTest {
- Props props = new Props(new Properties());
- LogbackHelper underTest = new LogbackHelper();
-
@Rule
public TemporaryFolder temp = new TemporaryFolder();
+ private Props props = new Props(new Properties());
+ private LogbackHelper underTest = new LogbackHelper();
+
@Before
public void setUp() throws Exception {
File dir = temp.newFolder();
public class SearchLogging {
- private static final String LOG_FORMAT = "%d{yyyy.MM.dd HH:mm:ss} %-5level es[%logger{20}] %X %msg%n";
+ private static final String LOG_FORMAT = "%d{yyyy.MM.dd HH:mm:ss} %-5level es[][%logger{20}] %X %msg%n";
private LogbackHelper helper = new LogbackHelper();
private static final String CE_ACTIVITY_APPENDER_NAME = "ce_activity";
private static final String CE_ACTIVITY_FILE_NAME_PREFIX = "ce_activity";
- private static final String CE_ACTIVITY_ENCODER_PATTERN = "%d{yyyy.MM.dd HH:mm:ss} %-5level [%logger{20}] %msg%n";
+ private static final String CE_ACTIVITY_ENCODER_PATTERN = "%d{yyyy.MM.dd HH:mm:ss} %-5level [%X{ceTaskUuid}][%logger{20}] %msg%n";
static final String MDC_CE_ACTIVITY_FLAG = "ceActivityFlag";
+ static final String MDC_CE_TASK_UUID = "ceTaskUuid";
public static final String MAX_LOGS_PROPERTY = "sonar.ce.maxLogsPerTask";
public void initForTask(CeTask task) {
- // TODO put task UUID in MDC (cf. SONAR-7960)
+ MDC.put(MDC_CE_TASK_UUID, task.getUuid());
}
public void clearForTask() {
- // TODO clear task UUID from MDF (cf. SONAR-7960)
+ MDC.remove(MDC_CE_TASK_UUID);
}
public void logCeActivity(Logger logger, Runnable logProducer) {
public abstract class ServerProcessLogging {
private static final String LOG_LEVEL_PROPERTY = "sonar.log.level";
- private static final String LOG_FORMAT = "%d{yyyy.MM.dd HH:mm:ss} %-5level XXXX[%logger{20}] %msg%n";
+ private static final String LOG_FORMAT = "%d{yyyy.MM.dd HH:mm:ss} %-5level XXXX[%X{ceTaskUuid}][%logger{20}] %msg%n";
private final String processName;
private final LogbackHelper helper = new LogbackHelper();
import org.mockito.Mockito;
import org.slf4j.MDC;
import org.sonar.api.utils.log.Logger;
+import org.sonar.ce.queue.CeTask;
import org.sonar.process.LogbackHelper;
import org.sonar.process.ProcessProperties;
import org.sonar.process.Props;
import static ch.qos.logback.classic.Level.TRACE;
import static ch.qos.logback.classic.Level.WARN;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sonar.ce.log.CeLogging.MDC_CE_ACTIVITY_FLAG;
+import static org.sonar.ce.log.CeLogging.MDC_CE_TASK_UUID;
public class CeLoggingTest {
MDC.clear();
}
+ @Test
+ public void initForTask_stores_task_uuid_in_MDC() {
+ String uuid = "ce_task_uuid";
+
+ underTest.initForTask(createCeTask(uuid));
+
+ assertThat(MDC.get(MDC_CE_TASK_UUID)).isEqualTo(uuid);
+ }
+
+ private CeTask createCeTask(String uuid) {
+ CeTask ceTask = Mockito.mock(CeTask.class);
+ when(ceTask.getUuid()).thenReturn(uuid);
+ return ceTask;
+ }
+
+ @Test
+ public void clearForTask_removes_task_uuid_from_MDC() {
+ MDC.put(MDC_CE_TASK_UUID, "some_value");
+
+ underTest.clearForTask();
+
+ assertThat(MDC.get(MDC_CE_TASK_UUID)).isNull();
+ }
+
@Test
public void createCeConfigurationConfiguration_fails_if_log_directory_is_not_set_in_Props() {
LogbackHelper helper = new LogbackHelper();
}
private static Logger createLogger(Level info) {
- Logger logger = Mockito.mock(Logger.class);
+ Logger logger = mock(Logger.class);
when(logger.isDebugEnabled()).thenReturn(DEBUG.isGreaterOrEqual(info));
when(logger.isTraceEnabled()).thenReturn(TRACE.isGreaterOrEqual(info));
return logger;
assertThat(logs.get(3)).startsWith(" - VisitorC | time=");
}
- private static class VisitorA implements ComponentVisitor {
- @Override
- public Order getOrder() {
- return Order.PRE_ORDER;
- }
-
- @Override
- public CrawlerDepthLimit getMaxDepth() {
- return CrawlerDepthLimit.PROJECT;
+ private static class VisitorA extends TypeAwareVisitorAdapter {
+ public VisitorA() {
+ super(CrawlerDepthLimit.PROJECT, Order.PRE_ORDER);
}
}
- private static class VisitorB implements ComponentVisitor {
- @Override
- public Order getOrder() {
- return Order.PRE_ORDER;
- }
-
- @Override
- public CrawlerDepthLimit getMaxDepth() {
- return CrawlerDepthLimit.PROJECT;
+ private static class VisitorB extends TypeAwareVisitorAdapter {
+ public VisitorB() {
+ super(CrawlerDepthLimit.PROJECT, Order.PRE_ORDER);
}
}
- private static class VisitorC implements ComponentVisitor {
- @Override
- public Order getOrder() {
- return Order.PRE_ORDER;
- }
-
- @Override
- public CrawlerDepthLimit getMaxDepth() {
- return CrawlerDepthLimit.PROJECT;
+ private static class VisitorC extends TypeAwareVisitorAdapter {
+ public VisitorC() {
+ super(CrawlerDepthLimit.PROJECT, Order.PRE_ORDER);
}
}
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
InternalCeQueue queue = mock(InternalCeQueue.class);
ReportTaskProcessor taskProcessor = mock(ReportTaskProcessor.class);
- CeLogging ceLogging = mock(CeLogging.class);
+ CeLogging ceLogging = spy(CeLogging.class);
CeWorkerCallable underTest = new CeWorkerCallableImpl(queue, ceLogging, taskProcessorRepository);
InOrder inOrder = Mockito.inOrder(ceLogging, taskProcessor, queue);
static final String CONSOLE_APPENDER = "CONSOLE";
static final String GOBBLER_LOGGER = "gobbler";
static final String GOBBLER_APPENDER = "GOBBLER";
- static final String APP_PATTERN = "%d{yyyy.MM.dd HH:mm:ss} %-5level app[%logger{20}] %msg%n";
+ static final String APP_PATTERN = "%d{yyyy.MM.dd HH:mm:ss} %-5level app[][%logger{20}] %msg%n";
private final LogbackHelper helper = new LogbackHelper();