`

.Net下几种日志管理方法

阅读更多
.Net下几种日志管理方法

.Net下几种日志管理方法

日志是应用程序中不可缺少的一部份,不仅可以记录应用程序的运行状态,还可以记录一些BUG,便于应用程序的更新与修改。
在.Net有好几种方法可以对日志进行管理。
1、数据库日志。
2、文本日志。
3、系统事件日志。

首先,对于数据库日志而言,它的使用简单而且方便。这里就不做太多的讨论,相信写过与数据相关的项目的人都会用数据来记录一些日志。然而它唯一不好的就是:必须先保证你的数据库链接是正确无误的。
然而这一保证不是必然的,所以这里我再讨论一下其它的两种情况,文本日志及系统事件日志。

文本日志:
它使用简单,而且查看也方便。不好的就是不便于做大量的日志,而且日志内容的查看与分析都不方便。然而它还是可在在一些不适合数据库日志的地方使用。例如一些测试消息的输出,一些独立组件的少量日志等。
一般情况下,为了方便管理,以天为单位对日志文件进行分类。这样一来也可以简单的对文件进行管理。例如:你的文件名可以知道这个日志是什么时候的,然后可以简单的做一个类似数据库一样的查询,管理也还方便。毕竟文本对系统来说是如此的简单。
.Net有一个诊断类,可以把文本以监听的方式添加到Trace以及Debug上,这样一来,你的所有指向Trace和Degug的输出都会记录到文件里去。这是一个很不错的方法。

using System.Diagnostics;

Debug.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(DateTime.Now.ToString("yyyyMMdd")+"..log"));
Debug.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(Console.Out));

或者:
Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(DateTime.Now.ToString("yyyyMMdd")+"..log"));
Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(Console.Out));

这里的区别是:Trace在Release下可以使用,而Debug只在Debug下使用。
我觉得所有的文本日志中,上面的方法是最好用的。你只须要再做一个日志管理的类就行了。
当然,还要注意,就是监听在24小时后要更新一次,应该把当前的监听清理掉,然后重新添加一个。这也简单。
另一个方法就是自己写文本进行管理。这样的方法要略麻烦一点点,道也不难。

然而文本日志除了不便于做大量日志的工作以还,还有一个致命的问题:进程冲突!
因为文本日志要锁定正在写的文本文件,所以其它要写该文件的程序会出现错误。一般情况下,如果应该程序只有一个副本在运行,而且把日志做为一个全局的静态对象来处理,也不会有什么太大的问题。但程序的第二个副本会因为文件不能打开而启动失败。
这并不是一个无法解决的问题,只用保证程序有一个副本就行了。如果不保证的话,那么小有一点复杂,这里就不再讨论了,下次有机会再讨论这个问题。

对于上面的问题,我想暂时放弃文本日志,用系统的事件日志来处理。

系统事件日志:
.net下有一个EventLog类,它直接与系统的事件日志关联。
简单的一个:
EventLog.WriteEntry("LogSource","This is a test log.");
就可以往系统里写一个事件了。
然而把它用好也还有点点麻烦。首先是上面的方法会在系统的Application下写一个事件日志,而且为默认为Information类型。这样很不利于管理,大家可以在管理工具里看一下日志,就会发现大量的日志,自己写的一个小日志简直无法找到。
然而.Net为我们提供了几个方法来更好的管理日志。

1、添加一个新的LogSource。
什么是LogSource?其实简单的说,它就是日志的一个分类标记,例如你可以用程序一次取出所以LogSource为指定内容的日志。这样一来,只要你记得这个Source名,你就可以读取和分类管理日志了。
默认情况下,你在直接用EventLog的静态函数写日志的时候,要指定一个LogSource,如果LogSource不存在,那么它就自动在Application下建立一个,因此,创建LogSource就这么简单了。

2、添加一个新的Log.
什么是Log.这里的Log是指系统事件日志里的大日志分类,一般情况下,系统有Application,System和Sercuity三个日志,每个下面有不同的Soucce,这样就构成了日志系统。
你不能独立的创建一个Log,因为.NET里没有提供任何方法来创建一个Log,只能通过函数:CreateEventSource(string,string)
来创建一个Sourcce,此时如果你这样做:CreateEventSource("MySource","MyLog");
你就会在日志管理器里看到多了一个MyLog类,然而再这样写日志:
EventLog.WriteEntry("MySource","This is a test log.");
就可以写一条记录到MyLog分类下,这样就可以很好的管理自己的日志了。
需要说明的是:
如果Source已经存在,那么创建会失败。注意:不管Source的哪个Log下,只要Source的名字已经存在,那么你的创建都会失败。例如:如果有一个"Source1"的日志在Application里,那么你就不能再到其它Log里再创建一个名为"Source1"的日志了。另外:你用程序创建的日志不能在日志管理器里删除它(Messages可以删除,但日志分类不能删除)。方法是你还是用程序可以来删除,或者在注册表里来删除它。它的位置:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\]
看一下注册表,或许你会明白一些。
最后就是用日志实例对象来写日志。你可以指定一个Log名和一个Source名来写日志,但要注意,必须是Log与Source匹配,否则也会出现错误。这比直接用静态方法来写日志要复杂一点点,但你有更多的自由空间。
系统事件日志不好的地方就是日志只保存三个月,而且不好管理。如果你可以直接管理服务器,或者就在本机上运行应该会好一些,否则你就不得不自己写些代码来管理日志了。当然,如果一些重要的日志,可以导出到其它文件中。
它的好处是很多的:
1、不必与数据库链接,效率会高一些,也不会有数据库访问失败的问题。
2、不会有进程冲突问题,它是系统的日志,不管是什么应用程序都可以写日志。
3、全局可用,不管在哪里都可以直接写日志,而且可读。因此可以把它当成一个消息通信平台。(当然,可能只有那些大脑有点问题的人会这样做。)然而我只是想说明:A进程写的日志,B进程可以直接读取。

好了,关于日志这次就总结这些。

 
分享到:
评论

相关推荐

    如何用在ASP.NET中写入事件日志

    这个问题可以通过以下几种方式解决: 1. **手动创建事件来源**: - 使用注册表编辑器(Regedit.exe或Regedt32.exe): - 打开注册表编辑器,导航至`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Event...

    c#.net做的学生信息管理系统

    C#.NET是一种基于.NET Framework的编程语言,它在开发企业级应用,尤其是数据库管理系统方面具有显著优势。在这个案例中,我们讨论的是一个用C#.NET编写的“学生信息管理系统”,这是一个常见的教学与实践项目,用于...

    基于ASP.net的企业网站后台管理系统源码.zip

    通过分析这个后台管理系统源码,我们可以学习到如何在ASP.NET环境下组织项目结构、设计数据库模型、实现业务逻辑、优化性能等方面的知识。同时,这也是一个很好的实践平台,可以帮助开发者提升实际项目开发的能力。...

    ASP.NET实现的图书馆管理系统源代码

    ASP.NET是一种基于.NET框架的服务器端编程模型,用于构建动态网站、Web应用程序和Web服务。在本案例中,"ASP.NET实现的图书馆管理系统源代码"是一个使用ASP.NET技术开发的实际项目,旨在帮助管理员管理和操作图书馆...

    ASP.NET合同管理管理系统源码

    在ASP.NET合同管理管理系统中,我们可以看到以下几个核心知识点: 1. **ASP.NET Web Forms**:作为ASP.NET的核心部分,Web Forms提供了一种模型-视图-控制器(MVC)之外的编程模型,允许开发者通过拖放控件的方式来...

    .net后台管理系统

    .NET后台管理系统通常包括以下几个关键组件: 1. 数据访问层:这是与数据库进行交互的部分,负责数据的读写操作。.NET框架提供了ADO.NET库,可以方便地连接和操作各种类型的数据库,如SQL Server、MySQL等。 2. ...

    ASP.NET配置管理

    ASP.NET配置管理是微软.NET Framework框架中的一个重要组成部分,它为开发者提供了一种高效、灵活的方式来管理应用程序的设置和配置信息。在ASP.NET中,配置管理主要用于定义应用的行为、数据库连接字符串、安全设置...

    asp.net 权限管理系统

    ASP.NET权限管理系统是一种基于微软的ASP.NET技术构建的用于控制用户访问权限的解决方案。它能够帮助开发者有效地管理和控制网站或应用程序中的用户权限,确保不同级别的用户只能访问他们被授权的功能和数据。在ASP...

    ASP.NET实现教学培养计划管理系统

    在“ASP.NET实现教学培养计划管理系统”中,我们可以深入探讨以下几个关键知识点: 1. **ASP.NET基础**:ASP.NET是Microsoft开发的一种用于构建Web应用的技术,它提供了一整套工具和服务,帮助开发者快速创建功能...

    asp.net酒店管理系统

    【ASP.NET酒店管理系统详解】 ASP.NET是微软公司推出的一种用于构建Web应用程序的开发框架,它基于.NET Framework,提供了丰富的功能和高效性能。本项目“ASP.NET酒店管理系统”就是利用C#编程语言,结合ASP.NET...

    ASP.NET源码——asp.net权限管理系统Demo源码.zip

    这个"ASP.NET源码——asp.net权限管理系统Demo源码.zip"文件包含了一个基于ASP.NET实现的权限管理系统的示例代码,对于学习和理解如何在ASP.NET中实现复杂的权限控制机制非常有帮助。 首先,我们要了解ASP.NET的...

    ASP.NET开发的Bug跟踪管理系统

    在这个"ASP.NET开发的Bug跟踪管理系统"中,我们可以深入探讨以下几个关键知识点: 1. **Bug跟踪管理**:在软件开发过程中,Bug跟踪是至关重要的。它涉及识别、记录、分类、优先级排序以及解决软件中的问题。该系统...

    VS2010 .net4.0 登录QQ 获取QQ空间日志 右键选中直接打开日志 免积分 源码下载

    标题中的"VS2010 .net4.0 登录QQ 获取QQ空间日志 右键选中直接打开日志 免积分 源码下载"揭示了一个开发项目,该项目使用Visual Studio 2010(VS2010)和.NET Framework 4.0作为开发环境,并且是用C#编程语言编写的...

    asp.net工资管理系统

    ASP.NET是微软公司推出的一种用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了强大的服务,包括语言无关性、自动垃圾回收、内存管理以及丰富的类库。在本例中,“asp.net工资管理系统”是一个使用...

    .NET教室管理系统源码

    本文将深入探讨.NET框架下的教室管理系统的设计原理、核心功能以及实现技术,帮助读者理解和掌握相关知识。 首先,.NET框架是由微软公司开发的一种应用程序开发平台,它提供了丰富的类库和工具,支持多种编程语言,...

    基于.net的客户管理系统

    在.NET框架下开发客户管理系统,主要涉及到以下几个核心知识点: 1. **C#编程语言**:.NET框架主要使用的编程语言之一是C#,这是一种面向对象的语言,语法简洁,功能强大。在客户管理系统中,C#用于实现业务逻辑,...

    vb.net图书管理系统

    VB.NET是一种基于.NET框架的编程语言,由微软公司开发,以其易学易用和强大的功能而广泛应用于各种系统开发,包括我们今天要讨论的图书管理系统。图书管理系统是一个典型的信息管理系统,它通过计算机技术对图书馆的...

    .NET酒店管理系统HotelManager

    .NET框架是由微软公司推出的一种开发平台,它提供了丰富的类库和工具,使得开发者可以快速、高效地创建各种类型的Windows应用程序。在HotelManager项目中,.NET框架的应用主要体现在以下几个方面: 1. **Windows ...

    图书馆管理系统(c#.net源码)

    《图书馆管理系统(c#.net源码)详解》 在信息技术飞速发展的今天,高效、便捷的管理系统已经成为各行各业不可或缺的工具,图书馆管理系统便是其中一种。本文将深入探讨基于C#.NET技术开发的图书馆管理系统,旨在帮助...

Global site tag (gtag.js) - Google Analytics