Log4j2中的自定义附件未收到任何日志



我已经设置了一个自定义的appender,它将记录到下面的内存中

@Plugin(name = "MemoryAppender",
category = Core.CATEGORY_NAME,
elementType = Appender.ELEMENT_TYPE)
class InMemoryAppender(name: String,
filter: Filter?) : AbstractAppender(name, filter, null, true, Property.EMPTY_ARRAY) {
companion object {
@PluginFactory
@JvmStatic
fun createAppender(
@PluginAttribute("name") name: String,
@PluginElement("Filter") filter: Filter?): InMemoryAppender {
return InMemoryAppender(name, filter)
}
}
private val buffer = CircularOverwritingBuffer(allowNonPowerOfTwoSizedBuffer = false)
override fun append(event: LogEvent?) {
event?.let {
buffer.add("[${event.level}] ${DateTimeFormatter.ISO_INSTANT.format(Instant.now())} ${event.message.formattedMessage}")
}
}
fun inOrder(numberOfItems: Int): Iterator<String> {
return buffer.emitInOrder(numberOfItems).iterator()
}
}

我已经将它添加到我的log4j conf文件中的根记录器中,首先通过创建appender

<appenders>
.... other appenders
<MemoryAppender name="In-Memory-Appender"/>
</appenders>

然后将其加载到根记录器中

<Loggers>
<Root level="${defaultLogLevel}">
.... opther appenders
<AppenderRef ref="In-Memory-Appender"/>
</Root>
</Loggers>

然而,当我现在为这样的类获得一个记录器时,我的缓冲区中什么都没有

private val log = loggerFor<AClass>()
// or
private val log = contextLog()

但如果我得到这样的记录器,我可以

LoggerContext.getContext().rootLogger.info("REQUESTING LOGS")

如何使我的appender正确捕获日志?

我的问题由以下答案解决:https://stackoverflow.com/a/21336499/2341393

问题是返回了不正确的记录器上下文,并且slf4j正在包装Log4J记录器。

相关内容

最新更新