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

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

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实现动态依赖注入。

Orchard源码:Logging的更多相关文章

  1. Orchard 源码探索(Log)

    简单工厂模式.抽象工厂模式和适配器模式 依赖倒置原则也叫依赖倒转原则,Dependence Inversion Principle,对抽象进行编程,不要对实现进行编程. A.高层次的模块不应该依赖于低 ...

  2. Orchard源码分析(5):Host相关(Orchard.Environment.DefaultOrchardHost类)

    概述 Host 是应用程序域级的单例,代表了Orchard应用程序.其处理应用程序生命周期中的初始化.BeginRequest事件.EndRequest事件等. 可以简单理解为HttpApplicat ...

  3. Orchard源码分析(7.1):Routing(路由)相关

    概述 关于ASP.NET MVC中路由有两个基本核心作用,一是通过Http请求中的Url参数等信息获取路由数据(RouteData),路由数据包含了area.controller.action的名称等 ...

  4. Orchard源码分析(4.4):Orchard.Caching.CacheModule类

    概述 CacheModule也是一个Autofac模块.   一.CacheModule类 CacheModule将DefaultCacheManager注册为ICacheManager:       ...

  5. Orchard源码分析(6):Shell相关

    概述在Orchard中,提出子站点(Tenant)的概念,目的是为了增加站点密度,即一个应用程序域可以有多个子站点. Shell是子站点(Tenant)级的单例,换句话说Shell代表了子站点.对比来 ...

  6. Orchard源码分析(5.1):Host初始化(DefaultOrchardHost.Initialize方法)

    概述 Orchard作为一个可扩展的CMS系统,是由一系列的模块(Modules)或主题(Themes)组成,这些模块或主题统称为扩展(Extensions).在初始化或运行时需要对扩展进行安装:De ...

  7. Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)

    概述 采用Event Bus模式(事件总线),可以使观察者模式中的观察者和被观察者实现解耦. 在.Net 中使用观察者模式,可以使用事件(委托)和接口(类).Orchard Event  Bus使用的 ...

  8. Orchard源码分析(4.1):Orchard.Environment.CollectionOrderModule类

    CollectionOrderModule类是一个Autofac模块(Module,将一系列组件和相关的功能包装在一起),而非Orchard模块.其作用是保证多个注册到容器的组件能按FIFO(Firs ...

  9. Orchard源码分析(3):Orchard.WarmupStarter程序集

    概述 Orchard.WarmupStarter程序集包含三个类:WarmupUtility.WarmupHttpModule和Starter<T>.该程序集主要为Orchard应用启动初 ...

  10. Orchard源码分析(2):Orchard.Web.MvcApplication类(Global)

    概述 分析一个的ASP.NET项目源码,首先可以浏览其项目结构,大致一窥项目其全貌,了解项目之间的依赖关系.其次可以浏览Web.config和Global.asax文件,找到应用程序的入口点. 本 文 ...

随机推荐

  1. oracle create table(转)

    //建测试表 create table dept( deptno number(3) primary key, dname varchar2(10), loc varchar2(13) ); crea ...

  2. 内存调试的东西D/dalvikvm( 809 ): GC_CONCURRENT freed

    一般Java虚拟机要求支持verbosegc选项,输出详细的垃圾收集调试信息.dalvik虚拟机很安静的接受verbosegc选项,然后什么都不做.dalvik虚拟机使用自己的一套LOG机制来输出调试 ...

  3. Into concurrent LRU caching once again

    But this time, with a more product oriented point of view, instead of researching. http://openmymind ...

  4. Unity3D 游戏开发之内存优化

    项目的性能优化主要围绕CPU.GPU和内存三大方面进行. 无论是游戏还是VR应用,内存管理都是其研发阶段的重中之重. 然而,在我们测评过的大量项目中,90%以上的项目都存在不同程度的内存使用问题.就目 ...

  5. Web 项目可能会用到的20款优秀的开源工具

    开源的应用程序和它们的源代码可以免费获得,因为版权是属于任何进行过修改或者提交代码的人.大多数提供开源软件的公司都可以建立行业标准,因此可以获得有利的竞争优势. 很多的开源应用程序和工具都有很强的替代 ...

  6. LeetCode——Serialize and Deserialize Binary Tree

    Description: Serialization is the process of converting a data structure or object into a sequence o ...

  7. Android学习笔记之图片轮播...

    PS:一个bug又折腾了一个下午....哎... 学习内容: 1.Android利用ViewPager和PagerAdapter实现图片轮播... 2.使用反射机制获取Android的资源信息... ...

  8. C#ASP.NET 通用扩展函数之 LogicSugar 简单好用

    说明一下性能方面 还可以接受 循环1000次普通Switch是用了0.001秒 ,扩展函数为0.002秒  , 如果是大项目在有负载均衡的情况下完全可以无视掉,小项目也不会计较这点性能了. 注意需要引 ...

  9. Java魔法堂:自定义和解析注解

    一.前言 注解(Annotation)作为元数据的载体,为程序代码本身提供额外的信息,使用过MyBatis等ORM框架的朋友对 @Insert 的注解应该不陌生了,这是MyBatis自定义的注解,显然 ...

  10. 转载:全球首个微信小程序(应用号)开发教程!通宵吐血赶稿,每日更新!

    微信应用号(小程序,「应用号」的新称呼)终于来了! 目前还处于内测阶段,微信只邀请了部分企业参与封测.想必大家都关心应用号的最终形态到底是什么样子?怎样将一个「服务号」改造成为「小程序」? 我们暂时以 ...