1.LogManager -- facade 用于与系统外部交互。
1.1 GetLogger 获取命名日志对象
LogManager获得的是ILog 对象
LoggerManager 获得的是ILogger对象
当获得到ILogger对象后使用WrapperMap 对象去lookup ILog
2.WrapperMap
Maps between logger objects and wrapper objects.
?这里是不是Warpper模式,还是一个Factory
构造函数使用了一个 WrapperCreationHandler 用于创建wrapper
m_repositories维护了 当前所有Logger实例和Wapper实例的对应关系。
!由于WrapperMap是总负责所有Logger,Wrapper的对应关系的,所有这种设计可以很好的管理所有的logger,为每一个logger注册了一个LoggerRepositoryShutdownEventHandler
处理程序,在Logger.Repository.ShutdownEvent 事件触发时,可以自动维护好关系。
3.WrapperCreationHandler
WrapperCreationHandler 是一个delegate , 声明方式如下
public delegate ILoggerWrapper WrapperCreationHandler(ILogger logger);
这里实现了一个策略模式用于封装Map过程。
4.LoggerRepositoryShutdownEventHandler。
private readonly LoggerRepositoryShutdownEventHandler m_shutdownHandler;
5.ILog,ILoggerWrapper,ILogger
ILogger是系统内部元素
ILog 是面向外部系统使用的元素,所以组合了ILogger,实现了更友好的处理方式。
ILoggerWrapper 是对ILogger的包装,ILog:ILoggerWrapper
这部分需要具体查看一个日志记录器的实现。
6.LoggerManager
6.1 使用 RepositorySelector 获取Ilogger实例
loggerManager中维护了一个 RepositorySelector ,用来获取Ilogger
7.IRepositorySelector
Interface used by the <see cref="LogManager"/> to select,create the <see cref="ILoggerRepository"/>.
每一个实现了IRepositorySelector 的class
具体Selector 的生成 需要读取 Assamble有关。
用于获取ILoggerRepository 的实例。
8.ILoggerRepository
This interface is used by the <see cref="LogManager"/> to obtain <see cref="ILog"/> interfaces.
维护着Loger,Level,app