diff --git a/loki-log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLevelLabelConfigurationTest.java b/loki-log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLevelLabelConfigurationTest.java
new file mode 100644
index 0000000..36dddb2
--- /dev/null
+++ b/loki-log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLevelLabelConfigurationTest.java
@@ -0,0 +1,130 @@
+package pl.tkowalcz.tjahzi.log4j2;
+
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import io.restassured.parsing.Parser;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.awaitility.Awaitility;
+import org.awaitility.Durations;
+import org.junit.jupiter.api.Test;
+import org.testcontainers.containers.BindMode;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.nullValue;
+
+@Testcontainers
+class LogLevelLabelConfigurationTest {
+
+ @Container
+ public GenericContainer loki = new GenericContainer("grafana/loki:latest")
+ .withCommand("-config.file=/etc/loki-config.yaml")
+ .withClasspathResourceMapping("loki-config.yaml",
+ "/etc/loki-config.yaml",
+ BindMode.READ_ONLY)
+ .waitingFor(
+ Wait.forHttp("/ready")
+ .forPort(3100)
+ )
+ .withExposedPorts(3100);
+
+ @Test
+ void shouldWorkWIthNoLogLevelConfigured() throws URISyntaxException {
+ // Given
+ System.setProperty("loki.host", loki.getHost());
+ System.setProperty("loki.port", loki.getFirstMappedPort().toString());
+
+ URI uri = getClass()
+ .getClassLoader()
+ .getResource("appender-test-with-log-label-unset.xml")
+ .toURI();
+
+ ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false))
+ .setConfigLocation(uri);
+
+ // When
+ Logger logger = LogManager.getLogger(LokiAppenderTest.class);
+ logger.info("Test");
+
+ // Then
+ RestAssured.port = loki.getFirstMappedPort();
+ RestAssured.baseURI = "http://" + loki.getHost();
+ RestAssured.registerParser("text/plain", Parser.JSON);
+
+ Awaitility
+ .await()
+ .atMost(Durations.TEN_SECONDS)
+ .pollInterval(Durations.ONE_SECOND)
+ .ignoreExceptions()
+ .untilAsserted(() -> {
+ given()
+ .contentType(ContentType.URLENC)
+ .urlEncodingEnabled(false)
+ .formParam("query=%7Bserver%3D%22127.0.0.1%22%7D")
+ .when()
+ .get("/loki/api/v1/query_range")
+ .then()
+ .log()
+ .all()
+ .statusCode(200)
+ .body("status", equalTo("success"))
+ .body("data.result.size()", equalTo(1))
+ .body("data.result[0].stream.server", equalTo("127.0.0.1"))
+ .body("data.result[0].stream.log_level", nullValue());
+ });
+ }
+
+ @Test
+ void shouldSendLogLevelAsConfigured() throws URISyntaxException {
+ // Given
+ System.setProperty("loki.host", loki.getHost());
+ System.setProperty("loki.port", loki.getFirstMappedPort().toString());
+
+ URI uri = getClass()
+ .getClassLoader()
+ .getResource("appender-test-with-log-label-set.xml")
+ .toURI();
+
+ ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false))
+ .setConfigLocation(uri);
+
+ // When
+ Logger logger = LogManager.getLogger(LokiAppenderTest.class);
+ logger.info("Test");
+
+ // Then
+ RestAssured.port = loki.getFirstMappedPort();
+ RestAssured.baseURI = "http://" + loki.getHost();
+ RestAssured.registerParser("text/plain", Parser.JSON);
+
+ Awaitility
+ .await()
+ .atMost(Durations.TEN_SECONDS)
+ .pollInterval(Durations.ONE_SECOND)
+ .ignoreExceptions()
+ .untilAsserted(() -> {
+ given()
+ .contentType(ContentType.URLENC)
+ .urlEncodingEnabled(false)
+ .formParam("query=%7Bserver%3D%22127.0.0.1%22%7D")
+ .when()
+ .get("/loki/api/v1/query_range")
+ .then()
+ .log()
+ .all()
+ .statusCode(200)
+ .body("status", equalTo("success"))
+ .body("data.result.size()", equalTo(1))
+ .body("data.result[0].stream.server", equalTo("127.0.0.1"))
+ .body("data.result[0].stream.log_level", equalTo("INFO"));
+ });
+ }
+}
diff --git a/loki-log4j2-appender/src/test/resources/appender-test-with-log-label-set.xml b/loki-log4j2-appender/src/test/resources/appender-test-with-log-label-set.xml
new file mode 100644
index 0000000..eb1ffa9
--- /dev/null
+++ b/loki-log4j2-appender/src/test/resources/appender-test-with-log-label-set.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+ ${sys:loki.host}
+ ${sys:loki.port}
+
+ log_level
+
+
+
+ %X{tid} [%t] %d{MM-dd HH:mm:ss.SSS} %5p %c{1} - %m%n%exception{full}
+
+
+
+
+
+
+
diff --git a/loki-log4j2-appender/src/test/resources/appender-test-with-log-label-unset.xml b/loki-log4j2-appender/src/test/resources/appender-test-with-log-label-unset.xml
new file mode 100644
index 0000000..663c75b
--- /dev/null
+++ b/loki-log4j2-appender/src/test/resources/appender-test-with-log-label-unset.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+ ${sys:loki.host}
+ ${sys:loki.port}
+
+
+
+ %X{tid} [%t] %d{MM-dd HH:mm:ss.SSS} %5p %c{1} - %m%n%exception{full}
+
+
+
+
+
+
+