【发布时间】:2020-11-03 12:28:33
【问题描述】:
我已经设置了一个自定义的附加程序,它将在下面记录到内存中
@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 文件中的根记录器中,首先是通过创建附加程序
<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 正确捕获日志?
【问题讨论】:
标签: java kotlin logging log4j log4j2