Use ListAppender for logging integration testing
diff --git a/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerCompanionTest.kt b/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerCompanionTest.kt
index 1d78b0b..5718259 100644
--- a/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerCompanionTest.kt
+++ b/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerCompanionTest.kt
@@ -16,16 +16,32 @@
*/
package org.apache.logging.log4j.kotlin
+import org.apache.logging.log4j.Level
+import org.apache.logging.log4j.kotlin.support.withListAppender
import org.junit.Test
+import kotlin.test.assertEquals
class LoggerCompanionTest {
companion object {
val log = logger()
}
+ // note: using LoggerContextRule here to init the config does nothing as the initialization happens in the companion
+ // log4j will fall back to the default config
+
@Test
fun `Logging from a function instantiation via companion logs the correct class name`() {
- // this should log from class LoggerCompanionTest
- log.error("This is an error log.")
+ val msg = "This is an error log."
+ val msgs = withListAppender { _, _ ->
+ log.error(msg)
+ }
+
+ assertEquals(1, msgs.size.toLong())
+
+ msgs.first().also {
+ assertEquals(Level.ERROR, it.level)
+ assertEquals(msg, it.message.format)
+ assertEquals(LoggerCompanionTest::class.qualifiedName, it.loggerName)
+ }
}
}
diff --git a/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerMixinCompanionExtendsTest.kt b/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerMixinCompanionExtendsTest.kt
index 223a0b6..cd2bbfe 100644
--- a/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerMixinCompanionExtendsTest.kt
+++ b/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerMixinCompanionExtendsTest.kt
@@ -16,15 +16,31 @@
*/
package org.apache.logging.log4j.kotlin
+import org.apache.logging.log4j.Level
+import org.apache.logging.log4j.kotlin.support.withListAppender
import org.junit.Test
+import kotlin.test.assertEquals
class LoggerMixinCompanionExtendsTest {
companion object : Logging
+ // note: using LoggerContextRule here to init the config does nothing as the initialization happens in the companion
+ // log4j will fall back to the default config
+
@Test
fun `Logging from an interface mix-in via companion logs the correct class name`() {
- // this should log from class LoggerMixinCompanionExtendsTest
- logger.error("This is an error log.")
+ val msg = "This is an error log."
+ val msgs = withListAppender { _, _ ->
+ logger.error(msg)
+ }
+
+ assertEquals(1, msgs.size.toLong())
+
+ msgs.first().also {
+ assertEquals(Level.ERROR, it.level)
+ assertEquals(msg, it.message.format)
+ assertEquals(LoggerMixinCompanionExtendsTest::class.qualifiedName, it.loggerName)
+ }
}
}
diff --git a/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerMixinExtendsTest.kt b/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerMixinExtendsTest.kt
index 2939833..082c944 100644
--- a/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerMixinExtendsTest.kt
+++ b/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/LoggerMixinExtendsTest.kt
@@ -16,13 +16,30 @@
*/
package org.apache.logging.log4j.kotlin
+import org.apache.logging.log4j.Level.ERROR
+import org.apache.logging.log4j.junit.LoggerContextRule
+import org.apache.logging.log4j.kotlin.support.withListAppender
+import org.junit.Rule
import org.junit.Test
+import kotlin.test.assertEquals
class LoggerMixinExtendsTest : Logging {
+ @Rule @JvmField var init = LoggerContextRule("InfoLogger.xml")
+
@Test
fun `Logging using an interface mix-in logs the correct class name`() {
- // this should log from class LoggerMixinExtendsTest
- logger.error("This is an error log.")
+ val msg = "This is an error log."
+ val msgs = withListAppender { _, _ ->
+ logger.error(msg)
+ }
+
+ assertEquals(1, msgs.size.toLong())
+
+ msgs.first().also {
+ assertEquals(ERROR, it.level)
+ assertEquals(msg, it.message.format)
+ assertEquals(LoggerMixinExtendsTest::class.qualifiedName, it.loggerName)
+ }
}
}
diff --git a/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/support/LoggerTests.kt b/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/support/LoggerTests.kt
new file mode 100644
index 0000000..a3ccf94
--- /dev/null
+++ b/log4j-api-kotlin/src/test/kotlin/org.apache.logging.log4j.kotlin/support/LoggerTests.kt
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.kotlin.support
+
+import org.apache.logging.log4j.LogManager
+import org.apache.logging.log4j.core.LogEvent
+import org.apache.logging.log4j.core.Logger
+import org.apache.logging.log4j.test.appender.ListAppender
+
+fun rootLogger() = LogManager.getRootLogger() as Logger
+
+fun withListAppender(block: (rootLogger: Logger, appender: ListAppender) -> Unit): List<LogEvent> {
+ val appender = ListAppender("List").apply { start() }
+ val root = rootLogger().apply { addAppender(appender) }
+
+ try {
+ block(root, appender)
+ return appender.events
+ } finally {
+ appender.stop()
+ root.removeAppender(appender)
+ }
+}