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)
+  }
+}