【发布时间】:2011-08-17 03:21:47
【问题描述】:
虽然核心 log4j 和 slf4j 库附带了很多好东西,我可以自己构建,但我想知道是否有任何库附带有趣的附加程序。
大多数附加程序似乎是提供与特定服务(例如电子邮件消息或更新 NT 事件日志)的某些连接的桥梁。我正在考虑更抽象的记录器,而不是中间件,但对实时系统的观察者同样有用。
一个我认为可能有用的附加程序的疯狂想法
日志记录通常很有用,但由于相关请求成功完成而真正不必要的消息量过大,因此可能会很痛苦。我的一个想法是,仅记录来自在处理过程中抛出一些异常的 http 请求的消息是没有用的。如果请求没有失败,则不会将任何内容添加到日志中。自然,这种 appender 需要一些东西来帮助控制它。
BufferControl {
FLUSH_NOW, // flush everything now in the buffer
FLLUSH, // flush everything when BufferingLogger.commit() is called.
CLEAR, // clear everything before
CLEAR_ALL; /// all past and future messages are ignored
IGNORE_AFTER; // ignore messages after this event.
IGNORE_BEFORE, // ignore messages before
CONTINUE, // just continue...
etc etc..
}
// implements could tell the bufferingappender to log messages because some exception was thrown etc.
LoggingEventWatcher {
BufferControl look(LoggingEvent, BufferingAppender);
}
// every logging event is passed to the logging event watcher which
BufferingAppender {
start();
reset(); // throw away everything in the buffer
commit(); // use returned BufferControl to flush or reset etc.
flush(); // unconditionally flush all messages now.
}
想象一下,如果只有在记录了某个异常时才能记录所有消息。需要一个控制器来标记日志记录事务的开始,以及根据某些条件是清除还是刷新。
当然需要一些技巧来重置缓冲区等等。
【问题讨论】:
-
你在说什么样的appender?此外 slf4j 是不同日志框架之间的接口,如 commons-logging、log4j 等。
-
我真的不明白您想要什么:如果您按照您描述的那样编写一些智能逻辑,那么为什么要限制自己使用一个(或两个)Java 日志框架?此类功能应该存在于某些日志记录后端(NT 事件日志、日志的数据库存储等)中,并且应用程序应该只将它们的日志数据推送到那里。
-
@js 我不在乎哪个 f/w 为我提供了附加程序,因为它很可能使用 slf4j 作为两者之间的桥梁。然而,我在追求更性感的附加器。