当日志事件级别≥DEBUG时,log4net如何调用自定义Appender?
log4net自定义Appender调用流程解析
自定义Appender代码
namespace Silas.Common.Logging { using DataModel; public LogAppender: BufferingAppenderSkeleton // 注:原代码存在拼写错误,正确类名为BufferingAppenderSkeleton { public LogAppender() { BufferSize = 0; } } protected override void SendBuffer(LoggingEvent[] events) { Send(events); } static void Send(IEnumerable<LoggingEvent> events) { // details omitted. This simply adds the events to a database table } }
log4net配置文件
<log4net> <appender name="LogAppender" type="Silas.Common.Logging.LogAppender"> <!-- 注:原配置缺少属性闭合引号 --> <threshold value="DEBUG"/> <bufferSize value="0"/> </log4net>
当日志级别≥DEBUG时的调用流程
- 配置加载与实例化:应用启动时,log4net会读取
log4net.config配置文件,通过反射创建Silas.Common.Logging.LogAppender的实例,同时加载配置中指定的threshold(DEBUG级别过滤规则)和bufferSize(0缓冲)参数。 - 日志级别过滤:log4net框架会自动对所有日志事件做级别校验,只有级别大于或等于DEBUG的事件,才会被传递到这个
LogAppender中进行后续处理。 - 缓冲触发逻辑:因为你的Appender继承了
BufferingAppenderSkeleton,且BufferSize设为0,这意味着每条符合级别的日志事件都会直接触发SendBuffer方法(不会累积批量再处理)。 - 自定义逻辑执行:框架会调用你重写的
SendBuffer方法,该方法内部再调用静态的Send方法,最终完成日志事件写入数据库的操作。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

