Enterprise Library 6——Using the Logging Application Block
原文参考 http://msdn.microsoft.com/en-us/library/dn440731(v=pandp.60).aspx
一、简介
日志通常满足两个主要的要求:1、监控应用程序性能并提供信息。性能方面,日志可以监控程序内部发生了什么,有时也监控程序外部发生了什么。2、更重要的是用于审计。这种日志可以跟踪用户的行为并且记录用户执行的一系列任务、读取和修改的信息、访问的资源。
日志模块是一个高灵活和可配置的解决方案,它允许以灵活多样的方式创建和存储日志信息于各种位置、分类并过滤信息、收集调试过程中的上下文信息、审计跟踪并记录。
二、日志模块能做什么?
日志模块可以使日志功能和应用程序代码分离。它可以把日志条目发送到Windows 事件日志、数据库、文本文件,也可以生成包含日志信息的邮件、windows消息队列等。也可以自定义发送目的。应用程序中,仅需简单地用合适的对象(如Logwriter)生成一个日志条目,然后调用其方法把日志条目写入相应的目标位置。
图1-An overview of the logging process and the objects in the Logging block
三、日志的代价和额外的上下文信息
无论怎样实现日志,它总会有一些性能影响。日志模块提供了灵活的、高度可配置的日志解决方案,并且经过精心设计来最小化性能影响。但是,你仍然需要知道这个影响,并且要考虑你的日志方案会如何影响它,需要在需求之间平衡。
LogWriter自动收集一些像时间、应用程序、机器名字、进程ID等上下文信息。为了最小化性能影响,LogWriter类缓存了这些值并且采用了延迟最小化——即只有当被一个Listener实际使用时才去创建。
然而,收集额外的上下文信息的代价是非常高的并且浪费宝贵的资源,这可能会影响性能。因此,在创建LogEntry时,只有指定需要某些不常用的信息时,日志模块才去收集。日志模块中的四个类可以收集指定的上下文信息,包括COM+、当前堆栈、运行时安全相关以及系统安全相关。LogEntry还有一个字典属性允许程序员添加信息。
四、怎样使用Logging Block?
其中的关键是创建日志条目,然后调用方法把这个日志条目写入目标。
1、添加LoggingBlock的引用到项目中
需要添加的引用有Microsoft.Practices.EnterpriseLibrary. Logging.dll,如果日志要写入数据库还要引用 Microsoft.Practices.EnterpriseLibrary. Logging.Database.dll
2、配置Loggin Block
配置Logging Block可以用代码的方法,也可以用配置工具,这里介绍配置工具的方法。
Step1:启动配置工具。运行"EntLibConfig.exe",点击"File|Open"打开目标程序的配置文件(Web.config或App.config),打开文件后如图1:
图1
Step2:配置。如果左边导航栏未出现"Logging Settings"节点则表明以前未进行过企业库日志相关的配置,此时点击"Blocks|Add Logging Settings",出现图2界面:
图2
如果是修改配置请右击"Logging Settings"选择"Show/Hide Application Block Elements"(或点击前面的三角符号)也会出现上图。
查看图2,先不要管"Logging Filters",界面被两条竖线划分成左中右三个区域,左边的是Category(日志类别),中间的是Listener(保存日志文件的载体),右边是Formatter(日志内容格式化器)。一个Category可以包含多个Listener,即一份日志可以写入多个载体中,一个Listener对应一个Formatter。
Logging Target Listener
保存日志的监听器,其中定义了日志保存的位置(日志载体):数据库、XML文件、FlatFile(文本文件)、Windows事件等10个位置。点击"Logging Target Listeners"右方的"+"号,可以添加日志载体。日志载体可分为10种类型:
Log Message Formatters:日志内容格式器。用于设置日志的格式。每一个Listener需要设定唯一一个Formatters,一个Formatters可以被多个Listener使用。
Categories:分类。每一个分类都有一个名字,每一个分类中包含一个或者多个Listener。当调用LogWriter.Write()方法时,需要给该方法指定所使用的分类的名字(如果不指定分类的名字则使用默认分类),write方法根据分类的名字找到其中包含的Listener,把日志内容写到每一个Listener中,其内容根据Formatter进行格式设置。如果你的应用程序需要不同类型的日志信息,你可以定义多个分类,比如:应用程序警告可以定义一个分类,该分类中包含Windows Event Listener;而用户的所有操作信息写到文本文件中,这就需要定义另外一个分类,其中包含Flat File Listener。
五、使用LogWriter创建和写入日志条目
(1)使用LogWriter的Write方法时,首先获得一个LogWriter实例,获得该实例需要一个LoggingConfiguration对象作为参数。
LoggingConfiguration loggingConfiguration = BuildProgrammaticConfig();
LogWriter defaultWriter = new LogWriter(loggingConfiguration);
(2)或者用LogWriterFactory类来自动读取配置文件,然后创建实例
LogWriterFactory logWriterFactory = new LogWriterFactory();
LogWriter logWriter = logWriterFactory.Create();
下面的几个例子演示了如何使用Write方法
// Check if logging is enabled before creating log entries.
if (defaultWriter.IsLoggingEnabled())
{
defaultWriter.Write("Log entry created using the simplest overload.");
defaultWriter.Write("Log entry with a single category.", "General");
defaultWriter.Write("Log entry with a category, priority, and event ID.",
"General", 6, 9001);
defaultWriter.Write("Log entry with a category, priority, event ID, "
+ "and severity.", "General", 5, 9002,
TraceEventType.Warning);
defaultWriter.Write("Log entry with a category, priority, event ID, "
+ "severity, and title.", "General", 8, 9003,
TraceEventType.Warning, "Logging Block Examples");
}
else
{
Console.WriteLine("Logging is disabled in the configuration.");
}
上面的内容对日志相关的基本知识和总体思路进行了说明。后面的部分会对涉及到的某些知识详细的介绍。
六、Categories
从该图可以看到,其需要设置的内容不多,Name:分类的名称。AutoFlush:设置为Ture时,每当调用Write()时,自动把日志信息写到目标;设置为Flase时,调用Write()时,日志仅仅写入缓存,当调用Listener的Flush方法时才写入目标。Listeners是该分类包含的目标监听器,可以根据需要添加多个监听器。
Enterprise Library 6——Using the Logging Application Block的更多相关文章
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图: 从上图我们可以 ...
- Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block
Download dll: http://www.microsoft.com/en-us/download/confirmation.aspx?id=15104 http://www.cnblogs. ...
- 微软Enterprise Library 4.1和Unity 1.2
说明 微软模式与实践团队今天发布了Enterprise Library 4.1和Unity 1.2版本,这次发布的主要新特性如下: 1. 支持Visual Studio 2008 SP1 2. Uni ...
- Enterprise Library系列文章目录(转载)
1. Microsoft Enterprise Library 5.0 系列(一) Caching Application Block (初级) 2. Microsoft Enterprise Lib ...
- Enterprise Library 5.0 系列教程
1. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (初级) 2. Microsoft Enterprise L ...
- 系列文章--Enterprise Library文章总结
自Enterprise Library 1.1 推出以来,Terry写了一系列的关于Enterprise Library的文章,其中得到了很多朋友的支持,在这里一并表示感谢.为了方便大家的阅读,这里我 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 使用企业库异常处理应用程序模块的 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block 到目前为止,我们使用的模块都是在同一个配置 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block 代理对象(Proxy Object) ...
随机推荐
- [CAMCOCO][C#]我的系统架构.服务器端.(一)
尽量少的前言 虽然写了N年代码了,但总觉得什么东西都是囫囵吞枣,无法尽得其精髓.最近整理了一套心目中的架构,如有错误之处,烦劳不吝指正,老胡在此不胜感激!! 第一篇 我心目中的架构 做了无数个系统,写 ...
- C# 线程抛异常
异常抛出 异常抛出要在线程代码中抛出,否则捕获不到 using System; using System.Threading; namespace testthread_keyword_lock { ...
- Python调用Webservice、访问网页
昨天在调试Webservice的时候,由于不想写测试程序,就想用Python访问Webservice,结果还是相当的麻烦.远没有VSIDE用的方便 不得不说VS还是很强大的,人性化做的很好,不需要你看 ...
- 我的一点关于把WndProc指向类的成员函数的看法
转载请注明来源:http://www.cnblogs.com/xuesongshu/ 我以前经常考虑使用WNDCLASS.CreateThread之类的Windows API时如何在类里面调用,传入函 ...
- 桌面虚拟化之XenDesktop7
安装篇 1. 安装所需要的组件 2. 安装核心组件 配置篇 完整的部署 1. 打开Citrix Studio软件 2. 选择完整部署 3. 创建站点 4. 选择数据库(可以使用自己的或者默认使用自带的 ...
- 10款经典的web前端特效的预览及源码
1.CSS3响应式导航菜单 今天我给大家介绍一下如何使用纯CSS来实现的一个响应式导航菜单,我们使用的是HTML5+CSS3技术,当浏览器窗口变小或者使用手机浏览器访问的时候,原本横条菜单会收缩成一个 ...
- setbuf
setbuf是linux中的C函数,主要用于打开和关闭缓冲机制. setbuf函数具有打开和关闭缓冲机制.为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ(定义在stdio.h头文件中) ...
- 在ArcGIS中WGS84大地坐标和投影平面坐标的转换
以WGS84转换为北京54坐标为例: 首先你要先知道转化的参数,鉴于我国曾使用不同的坐标基准(BJ54.State80.Correct54),各地的重力值又有很大差异,所以很难确定一套适合全国且精度较 ...
- Find the Difference
Given two strings s and t which consist of only lowercase letters. String t is generated by random s ...
- ubuntu 14.04 下FTP服务器的搭建--锁定用户目录,解决vsftpd: refusing to run with writable root inside chroot()
FTP服务器的搭建,我要实现的需求是: 不允许匿名访问,因为我的机器不想让谁都能登录上来,随便获取文件, 需要锁定一个目录,因为在家里,我需要给媳妇下载一些电影 韩剧之类的东西,媳妇会来我机器下载,但 ...