我们常常想快速的锁定程序的bug。
我们常常想通过查看文件就知道这段时间内程序的运行情况。
我们常常想通过查看数据库来了解用户对程序的操作情况。
我们甚至想,把这些数据都直接主动的发送到我的邮箱里。
事实上这些都很好搞定。
我们只需要 一个成熟优秀的日志框架来替我们做这些事情。像EnterpriseLibrary,ObjectGuy Framework,log4net,Nlog等都能满足你。
因为他们都有 一些共同的特点:
根据作用来分这些框架都会有以下组件或概念:记录器(Logger)、监视器/目标(Monitor /Target)、包装器(Wrapper)、过滤器(Filter)、布局(Layout)、严重性级别(Severity)。
1.记录器:日志的对象,可以同时连接一个或多个不同的监视器,记录各种不同的消息和信息。
2.监视器:用于存储和显示日志消息的媒介,有多种存在形式。如一般的文本文件、数据库、网络、控制台、邮箱等。
3.包装器:用于制定日志记录的方式。如:同步/异步记录,(出错时)回滚记录。
4.过滤器:用于根据严重性级别来过滤和忽略某类消息,只记录特定级别的日志消息。
5.布局:用于格式化输出。定义输出项和输出格式。
6.严重性级别:是对消息的分类,严重性级别表示消息的严重程度。也是过滤器的过滤依据。如:调试(DEBUG)、消息(INFO)、警告(WARN)、错误(ERROR)、严重错误(FATAL)严重性依次增强。
与上述对应的是一般的日志框架会提供的一些基本特性和功能:
1.记录简单的文本消息。
2.消息级别的过滤。
3.允许多个监视器。
4.记录消息种类和会话。
5.根据时间或大小将文件分割。
6.通过配置文件来控制日志,与代码分离。
但是他们还是有些区别的:
EnterpriseLibrary和ObjectGuy是部分收费的。
log4Net 和Nlog两个免费的开源框架,都支持.NET框架和跨平台,都有配置文件,都有丰富的监视器等等,都能满足绝大部分的需求。相比NLog支持异步记录,使得NLog的整体性能要优于log4net。NLog也有一些第三方图形查看器和分析器而且NLog使用起来非常方便(无论是通过代码还是配置文件)。
NLog
NLog允许我们自定义从跟踪消息的来源(source)到记录跟踪信息的目标(target)的规则(rules)。记录跟踪信息的目标(target)可以为如下几种形式:
- 文件
- 文本控制台
- Email
- 数据库
- 网络中的其它计算机(通过TCP或UDP)
- 基于MSMQ的消息队列
- Windows系统日志
除此之外,每一条跟踪消息都可以自动带有上下文信息(contextual information),并将其发送给记录跟踪信息的目标。这些上下文信息可以包含如下内容:
- 当前的日期和时间(多种格式),记录等级,来源名称
- 输出跟踪消息的方法的堆栈信息
- 环境变量的值
- 异常的详细信息
- 计算机、进程和线程名称
每条跟踪信息都包含一个记录等级(loglevel)信息,用来描述该条信息的重要性。NLog支持如下几种记录等级:
- Trace - 最常见的记录信息,一般用于普通输出
- Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
- Info - 信息类型的消息
- Warn - 警告信息,一般用于比较重要的场合
- Error - 错误信息
- Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
今后几篇博客会重点的介绍Nlog的实际的使用。敬请关注。