Repository
log4net的第二个组件是Repository。这个组件用于维护和组织Logger。
正如我们前面的文章说到的,log4net采用类似命名空间的层次结构组织和管理Logger。目前对于Repository的层次结构定义在log4net.Repository.Hierarchy命名空间下。
要实现Repository,需要实现log4net.Repository.ILoggerRepository接口。不过,可以使用另一个类log4net.Repository.LoggerRepositorySkeleton来代替上面的接口,作为基类。
如果你只是使用log4net而不是扩展log4net,那么你可能不会用到任何Repository的类。
当然,你需要使用LogManager类来自动化管理Repositories和Loggers。
Appender
任何一个好的日志框架都应该支持为不同的目的生成不同的输出,例如将跟踪内容输出到控制台,或者序列化到一个日志文件中。log4net完美的实现了这样的功能。log4net使用名为Appender的组件来定义输出的方法。正如其名,这个组件将自己附加到Logger组件上,并把Logger的输出传递到一个输出流上。你可以附加多个Appender到一个Logger上。当然,
log4net已经准备好了几个Appender,这些Appender可以在Log4net概貌上可以看到。
当然,这些已有的Appender可能并不满足你的应用需求,所以你可以自己写一个Appender,你只需要继承log4net.Appender.AppenderSkeleton类。这个类负责适配你的自定义类和IAppender接口。
Appender Filters
默认情况下,一个Appender将会把所有的记录的事件传递给Layout。Appender Filters能被用来依据某些策略过滤传递的事件。在log4net.Filter命名空间下,log4net已经定义了几个filters。通过使用这些filter,你既能过滤掉某个范围的值,也能过滤掉指定的字符串。
Layout
Layout组件用来向用户显示最终格式化的输出数据。依据使用不同的Layout,输出数据可以用多种格式显示,例如线性文件或是XML文件。Layout组件和Appender一起搭配工作。
在API文档中我们可以看到一些不同的Layout。对于一个Appender,你只能使用一个Layout。
如果你要创建自己的Layout,你需要继承log4net.Layout.LayoutSkeleton类。这个类实现了ILayout接口。