技术开发 频道

Enterprise Library Step By Step系列(八):日志和监测应用程序块

【IT168技术文档】写在前面:最近一段时间项目比较紧,所以这篇随笔出来的晚一些。今天写的是在日志里面包含名-值对的字典,跟踪活动并记录上下文信息,过滤事件,定制日志消息的格式,自定义Sink,自定义Formatter等。

一.在日志里面包含名-值对的字典:

在日志消息里面,我们可以包含名-值对这样的字典。这时首先需要创建一个Hashtable,通过Key-Value的方式把要记录的内容传入。示例代码如下:

1/**////创建一个日志项 2 LogEntry log = new LogEntry(); 3 4 /**////创建名-值对 5 Hashtable logtable = new Hashtable(); 6 logtable["key1"] = "value1"; 7 logtable["key2"] = "value2"; 8 logtable["key3"] = "value3"; 9 10 log.Message = this.txt_LogMessage.Text; 11 log.Category = Category.General; 12 log.Priority = Priority.Normal; 13 14 /**////写入日志 15 Logger.Write(log,logtable);

输出后的文本:在这里我们用了Text Formatter


二.跟踪活动并记录上下文信息:

跟踪应用系统的活动是一项常见的功能,我们需要把活动的起始时间和结束时间以及活动的其他的信息记录下来。日志和监测应用程序块支持通过活动ID来跟踪一项活动,活动ID可以在代码中指定,也可以通过程序块来自动生成,程序块自动记录活动的起始时间和结束时间。活动跟踪由Tracer类来提供。示例代码如下:

1using(new Tracer("UI Events")) 2 { 3 Logger.Write("Troubleshooting message"); 4 }

输出后的文本:同样我们用了Text Formatter

三.过滤事件:

在日志和监测应用程序块里面,支持两种方式的过滤事件:基于优先级过滤事件和基于类别过滤事件。过滤的过程发生在日志项传递给分发策略之前。在入门篇里我们知道,每个日志消息都会有一个优先级,我们可以在代码中指定或默认值为-1。我们可以通过配置 Client Setting使低于某个优先级的消息被过滤掉,只记录某个类别的消息或者过滤掉具有某个类别的日志项。

在下面的图中,日志项为01的消息将不被记录。

Client SettingCategoryFilterSettings属性决定某个类别的日志是被记录还是被过滤掉。我们可以自行进行设置:



在下图中,”UI Events”类别的日志将不被记录。



四.定制日志消息的格式:

Formatter接受一个日志项的并返回一个格式化的字符串,应用程序块格式化将字符串传给SinkText Formatter 使用模版生成格式化字符串,在应用配置中可以有多个 Text Formatters,每个有自己的模版同时我们也可以定制自己的 Formatter

日志项根据其类别导向到目的地目的地规定了 Formatter 和接收格式化日志项的 Sink


Text Formatter 有一个模版配置属性。

模版编辑器定制日志项的格式, {参数}由日志项的值填充。


0
相关文章