• Orchard源码:Logging


    试着用markdown写些东西。貌似博客园支持的还有问题,代码片段显示错位,还得另外上传图片。还是用普通方法写写随笔好了。

    Logging相对也是比较松耦合的模块,可以随时提取出来用在自己的项目中。其实说到底它还是用的log4net。先看一下几个文件。

    image

    1.ILogger。俗话说面向接口编程,这个就是Orchard中Logger的接口,提供了2个方法

    public interface ILogger {
            bool IsEnabled(LogLevel level);
            void Log(LogLevel level, Exception exception, string format, params object[] args);
        }

    2.CastleLogger

    ILogger的默认实现,系统就是用的这个,看名称是CastleLogger,不要被迷惑。系统中Castle.Core.Logging.ILogger也是一个接口,log4net才是真正的实现。

    3.LoggingExtensions

    ILogger的一些扩展方法,如Error,Debug,Warning等,就是不同的LogLevel。

    4.NullLogger

    也是ILogger的实现,就是啥事不干,这样ILogger可以根据不同的上下文环境选择是否输出Log。

    5.OrchardFileAppender

    扩展了log4net 的 RollingFileAppender。这样当日志文件被锁定时,它可以输出到另外的文件中。

    6.ILoggerFactory,CastleLoggerFactory,NullLoggerFactory

    第一个是是接口,后2个是实现

    7.OrchardLog4netFactory

    这个Factory 继承的是AbstractLoggerFactory,这是一个真的“Factory”,CastleLoggerFactory是他的一层代理

    8.LoggingModule

    用于注册Logging模块

    以上是大致介绍,光看名字就知道用了好几个design pattern。瞬间感觉高大上。

    这样设计显而易见的是可以方便实现自己的ILoggerFactory和ILogger。另一个是在注入ILogger时候,可以把当前使用Ilogger的组件如注给它。

    普通log4net实例化方法:

    private static readonly ILog logger=LogManager.GetLogger(typeof(类))

    这样的话就查看日志文件就可以知道日志是哪个类生成的

    Orchard中的依赖注入

     public class Thing {
            public ILogger Logger { get; set; }
        }

    在注入的时候已经把Thing这个类关联到了这个ILogger中。而不用每次都去指定具体的类。

    这种运行时动态构造对象在Orchard中使用很多。请查看LoggingModule.AttachToComponentRegistration方法。详细之后会专门介绍如何使用Autofac实现动态依赖注入。

  • 相关阅读:
    Go语言实现:【剑指offer】跳台阶
    Go语言实现:【剑指offer】斐波那契数列
    Go语言实现:【剑指offer】栈的压入、弹出序列
    Go语言实现:【剑指offer】替换空格
    Go语言实现:【剑指offer】表示数值的字符串
    Go语言实现:【剑指offer】第一个只出现一次的字符位置
    Go语言实现:【剑指offer】把字符串转换成整数
    Go语言实现:【剑指offer】翻转单词顺序列
    robot framework使用小结(二)
    robot framework使用小结(一)
  • 原文地址:https://www.cnblogs.com/miku/p/4302217.html
Copyright © 2020-2023  润新知