Orchard源码:Logging
试着用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的更多相关文章
- Orchard 源码探索(Log)
		简单工厂模式.抽象工厂模式和适配器模式 依赖倒置原则也叫依赖倒转原则,Dependence Inversion Principle,对抽象进行编程,不要对实现进行编程. A.高层次的模块不应该依赖于低 ... 
- Orchard源码分析(5):Host相关(Orchard.Environment.DefaultOrchardHost类)
		概述 Host 是应用程序域级的单例,代表了Orchard应用程序.其处理应用程序生命周期中的初始化.BeginRequest事件.EndRequest事件等. 可以简单理解为HttpApplicat ... 
- Orchard源码分析(7.1):Routing(路由)相关
		概述 关于ASP.NET MVC中路由有两个基本核心作用,一是通过Http请求中的Url参数等信息获取路由数据(RouteData),路由数据包含了area.controller.action的名称等 ... 
- Orchard源码分析(4.4):Orchard.Caching.CacheModule类
		概述 CacheModule也是一个Autofac模块. 一.CacheModule类 CacheModule将DefaultCacheManager注册为ICacheManager: ... 
- Orchard源码分析(6):Shell相关
		概述在Orchard中,提出子站点(Tenant)的概念,目的是为了增加站点密度,即一个应用程序域可以有多个子站点. Shell是子站点(Tenant)级的单例,换句话说Shell代表了子站点.对比来 ... 
- Orchard源码分析(5.1):Host初始化(DefaultOrchardHost.Initialize方法)
		概述 Orchard作为一个可扩展的CMS系统,是由一系列的模块(Modules)或主题(Themes)组成,这些模块或主题统称为扩展(Extensions).在初始化或运行时需要对扩展进行安装:De ... 
- Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)
		概述 采用Event Bus模式(事件总线),可以使观察者模式中的观察者和被观察者实现解耦. 在.Net 中使用观察者模式,可以使用事件(委托)和接口(类).Orchard Event Bus使用的 ... 
- Orchard源码分析(4.1):Orchard.Environment.CollectionOrderModule类
		CollectionOrderModule类是一个Autofac模块(Module,将一系列组件和相关的功能包装在一起),而非Orchard模块.其作用是保证多个注册到容器的组件能按FIFO(Firs ... 
- Orchard源码分析(3):Orchard.WarmupStarter程序集
		概述 Orchard.WarmupStarter程序集包含三个类:WarmupUtility.WarmupHttpModule和Starter<T>.该程序集主要为Orchard应用启动初 ... 
- Orchard源码分析(2):Orchard.Web.MvcApplication类(Global)
		概述 分析一个的ASP.NET项目源码,首先可以浏览其项目结构,大致一窥项目其全貌,了解项目之间的依赖关系.其次可以浏览Web.config和Global.asax文件,找到应用程序的入口点. 本 文 ... 
随机推荐
- asp.net中使用ueditor
			原文地址:http://blog.uoolo.com/Article/16 还有在MVC中使用ueditor:http://blog.uoolo.com/Article/111 最初百度了一下“编辑器 ... 
- ListView具有多种item布局——实现微信对话列
			这篇文章的效果也是大家常见的,各种通讯应用的对话列表都是这种方式,像微信.whatsapp.易信.米聊等.我们这篇文章也权当为回忆,形成简单的笔记.这篇文章参考了2009年Google IO中的< ... 
- Java知多少(完结)
			系列文章: Java知多少(上) Java知多少(中) Java知多少(下) 
- Web Component--01. 简介
			Web Components 是什么? Web Components是W3C定义的新标准,它给了前端开发者扩展浏览器标签的能力,可以自由的定制组件,更好的进行模块化开发,彻底解放了前端开发者的生产力. ... 
- 使用log4net
			原文:<使用log4net,没有日志文件生成> Posted on 2014/06/12 ================================================= ... 
- js中加密及设置cookie
			1.设置cookie及有效期时长 //cname:cookie的名称,cvalue:cookie的内容,exdays:cookie有效期时长: function setCookie(cname, cv ... 
- Android manifest之系统自带的permission
			Android manifest之系统自带的permission 本文描述Android系统自带的permission.点击查看:“关于permission的原始定义和说明”.点击查看:“Androi ... 
- [转载]AxureRP 7超强部件库下载
			很多刚刚开始学习Axure的朋友都喜欢到网上搜罗各种部件库(组件库)widgets library ,但是网络中真正实用的并且适合你使用的少之又少,最好的办法就是自己制作适合自己工作内容的部件库. 这 ... 
- Android 学习笔记之AndBase框架学习(一) 实现多功能标题栏
			PS:Volley框架终于通过看源码的方式完成了所有的学习..开始学习AndBase...AndBase的源码实在是多的离谱...因此就不对所有的源码进行分析了... 学习内容: 1.使用AndBas ... 
- Mysql学习笔记(四)字符串函数
			PS:终于看完了字符串函数,心都快碎了...涉及的函数真是太多了...感觉这里的字符串函数和JAVA里的基本都差不多了...基本上算是掌握了,但是想全记住那是不太可能的... 学习内容: 字符串函数的 ... 
