博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enterprise Library 2.0 Hands On Lab 翻译(4):日志应用程序块(一)
阅读量:6150 次
发布时间:2019-06-21

本文共 7058 字,大约阅读时间需要 23 分钟。

练习1:添加日志记录到应用程序中
该练习将示范如何向已有的应用程序中添加日志和监测(Trace姑且这么翻译吧,不太准确),并通过Enterprise Library Configuration工具来配置TraceListeners
 
第一步
打开EnoughPI.sln项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Logging\exercises\ex01\begin,并编译。
 
第二步 关于练习应用程序
选择Debug | Start Without Debugging菜单命令并运行应用程序,EnoughPI程序用来计算∏的精度。在NumericUpDown控件中输入你希望的精度并点击Calculate按钮。
 
第三步 添加日志
1
.选择EnoughPI项目,选择Project | Add Reference …菜单命令,在打开的对话框中选择Browse,并添加如下程序集。
Microsoft.Practices.EnterpriseLibrary.Logging.dll;
默认的位置应该是C:\Program Files\Microsoft Enterprise Library January 2006\bin
2
.在解决方案管理器中选择Calc\Calculator.cs文件,选择View | Code菜单命令,并添加如下命名空间。
None.gif
using
 Microsoft.Practices.EnterpriseLibrary.Logging;
3
.记录计算完成时的信息在Calculator.cs文件的OnCalculated方法中添加如下代码。
None.gif
protected
 
void
 OnCalculated(CalculatedEventArgs args)
None.gif
ExpandedBlockStart.gif
{
InBlock.gif
InBlock.gif    
// TODO: Log final result
InBlock.gif
InBlock.gif    LogEntry log 
= new LogEntry();
InBlock.gif
InBlock.gif    log.Message 
= string.Format("Calculated PI to {0} digits", args.Digits);
InBlock.gif
InBlock.gif    log.Categories.Add(Category.General);
InBlock.gif
InBlock.gif    log.Priority 
= Priority.Normal;
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    Logger.Write(log);
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    
if (Calculated != null)
InBlock.gif
InBlock.gif        Calculated(
this, args);
InBlock.gif
ExpandedBlockEnd.gif}
创建了一个新的日志项 LogEntry并设置参数,使用 Logger类的静态方法 Write()记录到一个或多个 TraceListener。注意这里没有使用硬编码而使用常量的 Category和
Priority
,在EnoughPI.LoggingConstants.cs中作了如下定义:
None.gif
public
 
struct
 Priority
None.gif
ExpandedBlockStart.gif
{
InBlock.gif    
public const int Lowest  = 0;
InBlock.gif
InBlock.gif    
public const int Low     = 1;
InBlock.gif
InBlock.gif    
public const int Normal  = 2;
InBlock.gif
InBlock.gif    
public const int High    = 3;
InBlock.gif
InBlock.gif    
public const int Highest = 4;
InBlock.gif
ExpandedBlockEnd.gif}
None.gif
None.gif
public
 
struct
 Category
None.gif
ExpandedBlockStart.gif
{
InBlock.gif
InBlock.gif    
public const string General = "General";
InBlock.gif
InBlock.gif    
public const string Trace   = "Trace";
InBlock.gif
ExpandedBlockEnd.gif}
4
.记录计算过程的信息在OnCalculated方法中添加如下代码。
None.gif
protected
 
void
 OnCalculating(CalculatingEventArgs args)
None.gif
ExpandedBlockStart.gif
{
InBlock.gif
InBlock.gif    
// TODO: Log progress
InBlock.gif
InBlock.gif    Logger.Write(
InBlock.gif
InBlock.gif        
string.Format("Calculating next 9 digits from {0}", args.StartingAt),
InBlock.gif
InBlock.gif        Category.General,
InBlock.gif
InBlock.gif        Priority.Low
InBlock.gif
InBlock.gif        );
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    
if (Calculating != null)
InBlock.gif
InBlock.gif        Calculating(
this, args);
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    
if (args.Cancel == true)
InBlock.gif
ExpandedSubBlockStart.gif    
{
InBlock.gif
InBlock.gif        
// TODO: Log cancellation
InBlock.gif
InBlock.gif        Logger.Write(
"Calculation cancelled by user!",
InBlock.gif
InBlock.gif            Category.General, Priority.High);
InBlock.gif
ExpandedSubBlockEnd.gif    }
InBlock.gif
ExpandedBlockEnd.gif}
注意这里使用 Logger类的重载 Write方法来快捷的创建了一个日志项 LogEntry。
5
.记录计算过程的异常信息,添加如下代码到OnCalculatorException方法中。
None.gif
protected
 
void
 OnCalculatorException(CalculatorExceptionEventArgs args)
None.gif
ExpandedBlockStart.gif
{
InBlock.gif    
// TODO: Log exception
InBlock.gif
InBlock.gif    
if (!(args.Exception is ConfigurationErrorsException))
InBlock.gif
ExpandedSubBlockStart.gif    
{
InBlock.gif
InBlock.gif        Logger.Write(args.Exception, Category.General, Priority.High);
InBlock.gif
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif    
if (CalculatorException != null)
InBlock.gif
InBlock.gif        CalculatorException(
this, args);
InBlock.gif
ExpandedBlockEnd.gif}
注意这里必须测试异常不能是 ConfigurationErrorsException,否则你将无法使用日志记录。对于异常信息的处理通常将会创建一个 Enterprise Library 异常应用程序块来处理异常,这在后面的练习中将会看到。
 
第四步 使用企业库配置工具
1
.使用Enterprise Library配置工具配置应用程序,可以通过开始菜单打开该配置工具,选择所有程序| Microsoft patterns and practices | Enterprise Library | Enterprise Library Configuration,并打开App.config文件。或者直接在Visual Studio中使用该工具打开配置文件。
2
.在解决方案管理器中选中App.config文件,在View菜单或者在右键菜单中选择Open With…,将打开OpenWith对话框,单击Add按钮。
3
.在Add Program对话框中,设置Program name指向EntLibConfig.exe文件,默认的路径为C:\Program Files\Microsoft Enterprise Library January 2006\bin,设置Friendly nameEnterprise Library Configuration,单击OK按钮。
Visual Studio
会把配置文件(App.config)作为一个命令行参数传递给EntLibConfig.exe
4
.在Open With对话框中,选中Enterprise Library Configuration并单击OK按钮。
 
第五步 配置应用程序
1
.在应用程序上右击并选择New | Logging Application Block
2
.默认的日志应用程序块定义了一个名为GeneralCategoryCategories是一组简单的文本标签,你可以提交日志信息到一组这样的CategoryGeneral类别有一个名为Formatted EventLog TraceListenerTraceListener。要添加一个新的Category,在Category Sources上右击,选择New | Category。一个Category可以有多个TraceListener,而一个TraceListener也可以被多个Category所引用。
注意Category其实是日志信息的一种逻辑分类,可以把要记录的日志信息分为界面日志,异常日志,数据访问日志等,至于具体记录到什么位置,则是由TraceListener来决定的。
3
.选择Logging Application Block | Trace Listeners | Formatted EventLog TraceListener节点,设置Source属性为EnoughPI
注意该TraceListener将使用Text Formatter来格式化日志信息,并且记录日志信息到Windows Event Log中。
4
.选择菜单File | Save All保存应用程序的配置,并关闭Enterprise Library Configuration工具。
 
第六步 运行应用程序
1
.选择Debug | Start Without Debugging菜单命令并运行应用程序,在NumericUpDown控件中输入精度并点击Calculate按钮。
2
.打开事件查看器。通过开始 | 管理工具 | 时间查看器,查看应用程序记录的日志信息。
3
.双击一条日志项查看详细的信息。
4
.退出应用程序
 
第七步 添加监测(Tracing
1
.我们经常需要监测应用程序在一个时间区的情况,日志应用程序块为我们提供了Tracing的功能。
2
.在解决方案管理器中选择Calc\Calculator.cs文件,选择View | Code菜单命令,在方法Calculate中添加如下代码。
None.gif
public
 
string
 Calculate(
int
 digits)
None.gif
ExpandedBlockStart.gif
{
InBlock.gif
InBlock.gif    StringBuilder pi 
= new StringBuilder("3", digits + 2);
InBlock.gif
InBlock.gif    
string result = null;
InBlock.gif
InBlock.gif    
try
InBlock.gif
ExpandedSubBlockStart.gif    
{
InBlock.gif
InBlock.gif        
if (digits > 0)
InBlock.gif
ExpandedSubBlockStart.gif        
{
InBlock.gif
InBlock.gif            
// TODO: Add Tracing around the calculation
InBlock.gif
InBlock.gif            
using (new Tracer(Category.Trace))
InBlock.gif
ExpandedSubBlockStart.gif            
{
InBlock.gif
InBlock.gif                pi.Append(
".");
InBlock.gif
InBlock.gif                
for (int i = 0; i < digits; i += 9)
InBlock.gif
ExpandedSubBlockStart.gif                
{
InBlock.gif
InBlock.gif                    CalculatingEventArgs args;
InBlock.gif
InBlock.gif                    args 
= new CalculatingEventArgs(pi.ToString(), i + 1);
InBlock.gif
InBlock.gif                    OnCalculating(args);
InBlock.gif
InBlock.gif                    
// Break out if cancelled
InBlock.gif
InBlock.gif                    
if (args.Cancel == truebreak;
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif                    
// Calculate next 9 digits
InBlock.gif
InBlock.gif                    
int nineDigits = NineDigitsOfPi.StartingAt(i + 1);
InBlock.gif
InBlock.gif                    
int digitCount = Math.Min(digits - i, 9);
InBlock.gif
InBlock.gif                    
string ds = string.Format("{0:D9}", nineDigits);
InBlock.gif
InBlock.gif                    pi.Append(ds.Substring(
0, digitCount));
InBlock.gif
ExpandedSubBlockEnd.gif                }
InBlock.gif
ExpandedSubBlockEnd.gif            }
InBlock.gif
ExpandedSubBlockEnd.gif        }
InBlock.gif
InBlock.gif        result 
= pi.ToString();
InBlock.gif
InBlock.gif        
// Tell the world I've finished!
InBlock.gif
InBlock.gif        OnCalculated(
new CalculatedEventArgs(result));
InBlock.gif
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif    
catch (Exception ex)
InBlock.gif
ExpandedSubBlockStart.gif    
{
InBlock.gif
InBlock.gif        
// Tell the world I've crashed!
InBlock.gif
InBlock.gif        OnCalculatorException(
new CalculatorExceptionEventArgs(ex));
InBlock.gif
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif    
return result;
InBlock.gif
ExpandedBlockEnd.gif}
None.gif
3
.在解决方案管理器中选择App.config,选择View | Open With…菜单命令,选择Enterprise Library Configuration并单击OK按钮。
4
.选择Logging Application Block节点,设置TracingEnabled属性为True
5
.添加新的TraceListener,选中Logging Application Block | Trace Listeners节点,并选择Action | New | FlatFile TraceListener菜单命令。

6
.设置Formatter属性为Text Formatter

7
.添加新的监测类别。选中Logging Application Block | Category Sources节点,并选择Action | New | Category菜单命令。
8
.设置Name属性为TraceSourceLevels属性为ActivityTracing
这里的类别名Trace将会在代码中使用,设置ActivityTracing级别只会在日志项开始和结束的时候记录监测日志信息。
9
.右击新的类别Trace,并选择New | Trace Listener Reference,设置ReferencedTraceListener属性为FlatFile TraceListener
10
.选择菜单File | Save All保存应用程序的配置,并关闭Enterprise Library Configuration工具。
11
.选择Debug | Start Without Debugging菜单命令并运行应用程序,在NumericUpDown控件中输入精度并点击Calculate按钮。
12
.现在可以在文件trace.log中看到监测日志信息。
None.gif
----------------------------------------
None.gif
None.gifTimestamp: 
13
/
12
/
2005
 
6
:
08
:
01
 AM
None.gif
None.gifMessage: Start Trace: Activity 
'
8c07ce3b-235b-4a51-bdcc-83a5997c989e
'
 
in
 method 
'
Calculate
'
 at 
71661842482
 ticks
None.gif
None.gifCategory: Trace
None.gif
None.gifPriority: 
5
None.gif
None.gifEventId: 
1
None.gif
None.gifSeverity: Start
None.gif
None.gifTitle:TracerEnter
None.gif
None.gifMachine: TAGGERT
None.gif
None.gifApplication Domain: EnoughPI.exe
None.gif
None.gifProcess Id: 
6016
None.gif
None.gifProcess Name: C:\Program Files\Microsoft Enterprise Library\labs\cs\Logging\exercises\ex01\begin\EnoughPI\bin\Debug\EnoughPI.exe
None.gif
None.gifWin32 Thread Id: 
6092
None.gif
None.gifThread Name: 
None.gif
None.gifExtended Properties: 
None.gif
None.gif
----------------------------------------
None.gif
None.gif
----------------------------------------
None.gif
None.gifTimestamp: 
13
/
12
/
2005
 
6
:
08
:
01
 AM
None.gif
None.gifMessage: End Trace: Activity 
'
8c07ce3b-235b-4a51-bdcc-83a5997c989e
'
 
in
 method 
'
Calculate
'
 at 
71662624219
 ticks (elapsed time: 
0.218
 seconds)
None.gif
None.gifCategory: Trace
None.gif
None.gifPriority: 
5
None.gif
None.gifEventId: 
1
None.gif
None.gifSeverity: Stop
None.gif
None.gifTitle:TracerExit
None.gif
None.gifMachine: TAGGERT
None.gif
None.gifApplication Domain: EnoughPI.exe
None.gif
None.gifProcess Id: 
6016
None.gif
None.gifProcess Name: C:\Program Files\Microsoft Enterprise Library\labs\cs\Logging\exercises\ex01\begin\EnoughPI\bin\Debug\EnoughPI.exe
None.gif
None.gifWin32 Thread Id: 
6092
None.gif
None.gifThread Name: 
None.gif
None.gifExtended Properties: 
None.gif
None.gif
----------------------------------------
13
.关闭应用程序和Visual Studio
完成后的解决方案代码如C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Logging\exercises\ex01\end所示。
 
更多Enterprise Library的文章请参考《
本文转自lihuijun51CTO博客,原文链接:
http://blog.51cto.com/terrylee/67633
 ,如需转载请自行联系原作者
你可能感兴趣的文章
SpringMVC权限管理
查看>>
spring 整合 redis 配置
查看>>
redhat6.1下chrome的安装
查看>>
cacti分组发飞信模块开发
查看>>
浅析LUA中游戏脚本语言之魔兽世界
查看>>
飞翔的秘密
查看>>
Red Hat 安装源包出错 Package xxx.rpm is not signed
查看>>
编译安装mysql-5.6.16.tar.gz
查看>>
类与成员变量,成员方法的测试
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>
the assignment of reading paper
查看>>
android apk 逆向中常用工具一览
查看>>
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>
五、字典
查看>>
前端js之JavaScript
查看>>