我有@CustomComponent({
selector: 'sub'
})
export class SubComponent {
}
的Async appender。
在某些情况下,我需要强行冲洗缓冲区。我怎么能这样做?
我没有关闭LogManager的内容,因此bufferSize="512"
不是一个选项。
请帮忙!
更新:以下是我的log4j2.xml的一部分:
LogManager.shutdown();
我在Async appender中有一个Kafka appender。不幸的是,Kafka appender和Async appender都没有immediateFlush字段。
答案 0 :(得分:1)
AsyncAppender使用的缓冲区没有刷新的概念。此缓冲区中的事件尚未处理,因此无法刷新。从队列中取出事件的速度取决于底层的Appender。
您是否正在寻找丢弃当前队列中所有事件的方法?如果是这样,你能详细说明你的用例吗? (该应用程序将简单地向队列中添加更多LogEvent,因此我无法看到丢弃排队事件如何有用......)
评论后更新:
我建议你重新配置而不是停止一些Appender,同时保持其他人运行。如果设置了monitorInterval
,则可以更改配置文件以删除要停止的Appender。作为重新配置过程的一部分,Log4j2将确保在Appender停止之前完全处理在Async Appender中排队的日志事件。
答案 1 :(得分:0)
This answer可能会解决您的问题...您只需找到一个特定的appender而不是刷新所有这些。但是,在您的情况下可能不需要刷新消息...
您也可以使用此技术编写一种方法,该方法将写入给定的消息,然后立即刷新,然后为将来的消息调用setImmediateFlush(false)...