Skip to content

Instantly share code, notes, and snippets.

@jasonheecs
Last active September 13, 2022 17:24
Show Gist options
  • Save jasonheecs/ca5c9f4eaa7afb0300a5fafc0223a65c to your computer and use it in GitHub Desktop.
Save jasonheecs/ca5c9f4eaa7afb0300a5fafc0223a65c to your computer and use it in GitHub Desktop.
TestAppender used for unit testing in log4j2 loggers
package com.example.appender
import org.apache.logging.log4j.core.Filter
import org.apache.logging.log4j.core.Layout
import org.apache.logging.log4j.core.LogEvent
import org.apache.logging.log4j.core.appender.AbstractAppender
import org.apache.logging.log4j.core.config.Property
import org.apache.logging.log4j.core.config.plugins.Plugin
import org.apache.logging.log4j.core.config.plugins.PluginAttribute
import org.apache.logging.log4j.core.config.plugins.PluginElement
import org.apache.logging.log4j.core.config.plugins.PluginFactory
import java.io.Serializable
@Plugin(name = "TestAppender", category = "Core", elementType = "appender", printObject = false)
class TestAppender
private constructor(name: String, filter: Filter?, layout: Layout<out Serializable>) :
AbstractAppender(name, filter, layout, true, Property.EMPTY_ARRAY) {
private val messages: MutableList<LogEvent> = ArrayList()
override fun append(event: LogEvent) {
messages.add(event)
}
fun getMessages(): MutableList<LogEvent> {
return messages
}
fun clearMessages() {
messages.clear()
}
companion object {
@PluginFactory
@JvmStatic
fun createAppender(
@PluginAttribute("name") name: String,
@PluginElement("Layout") layout: Layout<out Serializable>,
@PluginElement("Filter") filter: Filter?
): TestAppender {
return TestAppender(name, filter, layout)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment