Enterprise Library 2.0 Hands On Lab 翻译(4):日志应用程序块(一)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
练习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菜单命令,并添加如下命名空间。
using  Microsoft.Practices.EnterpriseLibrary.Logging;
3 .记录计算完成时的信息在Calculator.cs文件的OnCalculated方法中添加如下代码。
protected   void  OnCalculated(CalculatedEventArgs args)

{

    
// TODO: Log final result

    LogEntry log 
= new LogEntry();

    log.Message 
= string.Format("Calculated PI to {0} digits", args.Digits);

    log.Categories.Add(Category.General);

    log.Priority 
= Priority.Normal;

 

    Logger.Write(log);

 

    
if (Calculated != null)

        Calculated(
this, args);

}
创建了一个新的日志项 LogEntry并设置参数,使用 Logger类的静态方法 Write()记录到一个或多个 TraceListener。注意这里没有使用硬编码而使用常量的 CategoryPriority ,在EnoughPI.LoggingConstants.cs中作了如下定义:
public   struct  Priority

{
    
public const int Lowest  = 0;

    
public const int Low     = 1;

    
public const int Normal  = 2;

    
public const int High    = 3;

    
public const int Highest = 4;

}


public   struct  Category

{

    
public const string General = "General";

    
public const string Trace   = "Trace";

}
4 .记录计算过程的信息在OnCalculated方法中添加如下代码。
protected   void  OnCalculating(CalculatingEventArgs args)

{

    
// TODO: Log progress

    Logger.Write(

        
string.Format("Calculating next 9 digits from {0}", args.StartingAt),

        Category.General,

        Priority.Low

        );

 

    
if (Calculating != null)

        Calculating(
this, args);

 

    
if (args.Cancel == true)

    
{

        
// TODO: Log cancellation

        Logger.Write(
"Calculation cancelled by user!",

            Category.General, Priority.High);

    }


}
注意这里使用 Logger类的重载 Write方法来快捷的创建了一个日志项 LogEntry
5 .记录计算过程的异常信息,添加如下代码到OnCalculatorException方法中。
protected   void  OnCalculatorException(CalculatorExceptionEventArgs args)

{
    
// TODO: Log exception

    
if (!(args.Exception is ConfigurationErrorsException))

    
{

        Logger.Write(args.Exception, Category.General, Priority.High);

    }


    
if (CalculatorException != null)

        CalculatorException(
this, args);

}
注意这里必须测试异常不能是 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中添加如下代码。
public   string  Calculate( int  digits)

{

    StringBuilder pi 
= new StringBuilder("3", digits + 2);

    
string result = null;

    
try

    
{

        
if (digits > 0)

        
{

            
// TODO: Add Tracing around the calculation

            
using (new Tracer(Category.Trace))

            
{

                pi.Append(
".");

                
for (int i = 0; i < digits; i += 9)

                
{

                    CalculatingEventArgs args;

                    args 
= new CalculatingEventArgs(pi.ToString(), i + 1);

                    OnCalculating(args);

                    
// Break out if cancelled

                    
if (args.Cancel == truebreak;

 

                    
// Calculate next 9 digits

                    
int nineDigits = NineDigitsOfPi.StartingAt(i + 1);

                    
int digitCount = Math.Min(digits - i, 9);

                    
string ds = string.Format("{0:D9}", nineDigits);

                    pi.Append(ds.Substring(
0, digitCount));

                }


            }


        }


        result 
= pi.ToString();

        
// Tell the world I've finished!

        OnCalculated(
new CalculatedEventArgs(result));

    }


    
catch (Exception ex)

    
{

        
// Tell the world I've crashed!

        OnCalculatorException(
new CalculatorExceptionEventArgs(ex));

    }


    
return result;

}

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中看到监测日志信息。
----------------------------------------

Timestamp: 
13 / 12 / 2005   6 : 08 : 01  AM

Message: Start Trace: Activity 
' 8c07ce3b-235b-4a51-bdcc-83a5997c989e '   in  method  ' Calculate '  at  71661842482  ticks

Category: Trace

Priority: 
5

EventId: 
1

Severity: Start

Title:TracerEnter

Machine: TAGGERT

Application Domain: EnoughPI.exe

Process Id: 
6016

Process Name: C:\Program Files\Microsoft Enterprise Library\labs\cs\Logging\exercises\ex01\begin\EnoughPI\bin\Debug\EnoughPI.exe

Win32 Thread Id: 
6092

Thread Name: 

Extended Properties: 

----------------------------------------

----------------------------------------

Timestamp: 
13 / 12 / 2005   6 : 08 : 01  AM

Message: End Trace: Activity 
' 8c07ce3b-235b-4a51-bdcc-83a5997c989e '   in  method  ' Calculate '  at  71662624219  ticks (elapsed time:  0.218  seconds)

Category: Trace

Priority: 
5

EventId: 
1

Severity: Stop

Title:TracerExit

Machine: TAGGERT

Application Domain: EnoughPI.exe

Process Id: 
6016

Process Name: C:\Program Files\Microsoft Enterprise Library\labs\cs\Logging\exercises\ex01\begin\EnoughPI\bin\Debug\EnoughPI.exe

Win32 Thread Id: 
6092

Thread Name: 

Extended Properties: 

----------------------------------------
13 .关闭应用程序和Visual Studio
完成后的解决方案代码如C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Logging\exercises\ex01\end所示。
 
更多Enterprise Library的文章请参考《Enterprise Library系列文章













本文转自lihuijun51CTO博客,原文链接: http://blog.51cto.com/terrylee/67633  ,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
232 4
|
3月前
|
Java API 开发者
你的应用是不是只有service_stdout.log?
本文记录了logback-spring.xml文件不生效问题的整体排查思路。
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
43 2
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
3月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
52 0
|
3月前
|
监控 Java Serverless
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
|
3月前
|
存储 大数据 索引
【Azure Contianer Apps】在云上使用容器应用时收集日志遇见延迟问题
【Azure Contianer Apps】在云上使用容器应用时收集日志遇见延迟问题
|
3月前
|
存储
【Azure Log A workspace】Azure上很多应用日志收集到Log A workspace后如何来分别各自的占比呢?
【Azure Log A workspace】Azure上很多应用日志收集到Log A workspace后如何来分别各自的占比呢?