Skip to content

Instantly share code, notes, and snippets.

@qoomon
Last active September 13, 2019 13:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qoomon/97149930428eebc0ae01aa980bb01952 to your computer and use it in GitHub Desktop.
Save qoomon/97149930428eebc0ae01aa980bb01952 to your computer and use it in GitHub Desktop.
Log4jCollector Junit5 Extension
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.core.Filter.Result
import org.apache.logging.log4j.core.LogEvent
import org.apache.logging.log4j.core.Logger
import org.apache.logging.log4j.core.filter.AbstractFilter
import org.junit.jupiter.api.extension.AfterAllCallback
import org.junit.jupiter.api.extension.BeforeAllCallback
import org.junit.jupiter.api.extension.BeforeEachCallback
import org.junit.jupiter.api.extension.ExtensionContext
/**
* Usage:
*
* companion object {
* @RegisterExtension @JvmStatic
* val logCollector: Log4jCollector = Log4jCollector(LogManager.getLogger(...))
* }
*
*/
class Log4jCollector(private val logger: Logger) : BeforeAllCallback, BeforeEachCallback, AfterAllCallback {
val events = mutableListOf<LogEvent>()
private val eventCollector = object : AbstractFilter() {
override fun filter(event: LogEvent?): Result {
event?.let { events.add(it.toImmutable()) }
return Result.NEUTRAL
}
}
constructor(logger: org.apache.logging.log4j.Logger) : this(logger as Logger)
constructor(clazz: Class<*>?) : this(LogManager.getLogger(clazz) as Logger)
constructor(name: String?) : this(LogManager.getLogger(name) as Logger)
override fun beforeAll(context: ExtensionContext) {
logger.get().addFilter(eventCollector)
}
override fun beforeEach(context: ExtensionContext) {
events.clear()
}
override fun afterAll(context: ExtensionContext) {
logger.get().removeFilter(eventCollector)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment