Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,22 @@

import static org.assertj.core.api.Assertions.assertThat;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.UnsynchronizedAppenderBase;
import no.entur.logging.cloud.appender.AsyncAppenderBase;
import no.entur.logging.cloud.appender.scope.LoggingScopeAsyncAppender;
import no.entur.logging.cloud.logback.logstash.test.CompositeConsoleOutputControl;
import no.entur.logging.cloud.logback.logstash.test.CompositeConsoleOutputControlClosable;
import org.entur.example.web.rest.MyEntity;
import org.junit.jupiter.api.Test;
import org.slf4j.ILoggerFactory;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
Expand All @@ -14,6 +26,9 @@
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import java.time.Instant;
import java.util.Iterator;

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class WebLoggingFormatTest {

Expand Down Expand Up @@ -57,4 +72,47 @@ public void useMachineReadableJsonEncoder() throws InterruptedException {
}
}

@Test
public void logFromRemoteExample() throws InterruptedException {
// one-time init
UnsynchronizedAppenderBase appender = getAppender();
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();

// per log statement
// get inputs from remote call
Level level = Level.INFO;
Instant instant = Instant.EPOCH;
String message = "Test me";
Logger logger = loggerContext.getLogger("my.remote.package");

// create + write log event
LoggingEvent logEvent = buildLoggingEvent(logger, instant, "", null, level, message, null, null);
appender.doAppend(logEvent);
}

private LoggingEvent buildLoggingEvent(Logger logger, Instant time, final Marker marker, final Level level, final String msg) {
return buildLoggingEvent(logger, time, "", marker, level, msg, null, null);
}

private LoggingEvent buildLoggingEvent(Logger logger, Instant time, final String localFQCN, final Marker marker, final Level level,
final String msg, final Object[] params, final Throwable t) {
LoggingEvent le = new LoggingEvent(localFQCN, logger, level, msg, t, params);
le.addMarker(marker);
le.setInstant(time);
return le;
}

public static UnsynchronizedAppenderBase getAppender() {
Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
Iterator<Appender<ILoggingEvent>> appenderIterator = logger.iteratorForAppenders();
while (appenderIterator.hasNext()) {
Appender<ILoggingEvent> appender = appenderIterator.next();
if (appender instanceof no.entur.logging.cloud.appender.AsyncAppenderBase a) {
return a;
}
}
throw new IllegalStateException("Expected async appender");
}


}