日志管理1
1
Net 下几种日志管理方法 (将 Diagnostics.Trace 调试输 出 保存到 txt)
日志是应用程序中不可缺少的一部份,不仅可以记录应用程序的运行状态,还可以记
录一些 BUG,便于应用程序的更新与修改。
在.Net 有好几种方法可以对日志进行管理。 1、数据库日志。 2、文本日志。 3、系统事件日志。 2 首先,对于数据库日志而言,它的使用简单而且方便。
3
文本日志: 它使用简单,而且查看也方便。不好的就是不便于做大量的日志,而且日志内容的 查看与分析都不方便。然而它还是可在在一些不适合数据库日志的地方使用。例如 一些测试消息的输出,一些独立组件的少量日志等。 一般情况下,为了方便管理,以天为单位对日志文件进行分类。
这样一来也可以简单的对文件进行管理。 例如: 你的文件名可以知道这个日志是什么时候的, 然后可以简单的做一个类似数据库一样的查询, 管理也还方便。 毕竟文本对系统来说是如此 的简单。 诊断类----文本 监听方式 .Net 有一个诊断类,可以把文本以监听的方式添加到 Trace 以及 Debug 上,这样一来,你 的所有指向 Trace 和 Degug 的输出都会记录到文件里去。 using System.Diagnostics; Debug.Listeners.Add (new System.Diagnostics.TextWriterTraceListener(DateTime.Now.ToString(来,只要你记得这个 Source 名,你就可以读取 和分类管理日志了。 默认情况下, 你在直接用 EventLog 的静态函数写日志的时候, 要指定一个 LogSource, 如果 LogSource 不存在, 那么它就自动在 Application 下建立一个, 因此, 创建 LogSource 就这么简单了。 2、 添加一个新的 Log. 什么是 Log. 这里的 Log 是指系统事件日志里的大日志分类, 一般情况下, 系统有 Application, System 和 Sercuity 三个日志,每个下面有不同的 Soucce,这样就构成了日志系统。 你不能独立的创建一个 Log,因为.NET 里没有提供任何方法来创建一个 Log,只能通过 函数:CreateEventSource(string,string)
来创建一个 Sourcce,此时如果你这样做:CreateEventSource(日志文件中, 可以在调试程序的时候知道程序发生过哪些异常, 并且可以知道异 常发生的位置。这点对需要进行长时间运行并调试的程序尤为有效。 复制代码代码如下: ///
/// 将异常打印到 LOG 文件 /// ///
事件源等,主要有以下三种解决方案: A、 在程序运行之前,定义要使用的事件日志和事件源,打开注册表编辑器,手工将 事件日志和事件源添加到注册表中。主要步骤如下: ① ② ③ 点击“开始”菜单,再点击“运行”。 在“运行”的“打开”框中输入“regedit”,然后按 OK 按钮,打开注册表编辑器。 在注册表编辑器中找到下列子键:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog ④ 右键单击“Eventlog”,点击“新建”,再点“项”,将在“Eventlog”的下一级创建一个新
的项目,将此项目命名为“TDDN”, TDDN 项就是事件日志,可以根据实际情况为此项 命名,比如可以命名为项目名称。 ⑤ 在“TDDN”项上单击右键,点击“新建”,再点“项”,将在“TDDN”的下一级创建一个
新的项,将此项命名为“Weblog”, Weblog 项就是事件源,此项也可以根据实际情况命 名。 ⑥ 关闭注册表编辑器。
这样事件日志和事件源就建好了,如果需要多个事件日志或事件源,重复以上过程。这 种方法要求对注册表比较熟悉,操作起来可能有一点复杂,可以写一个类来实现配置注 册表,只要运行该类便可添加相应的项目,免除了手工添加的繁琐,这是第二种解决方 案,方法如下: B、 在 System.Diagnostics 命名空间中有一个 EventLogInstaller 类,它能够创建和配 置应用程序在运行时要读写的事件日志和事件源。通过下列步骤,便能够使用 EventLogInstaller 类来创建一个事件日志和事件源: ① ② ③ ④ 用 C#来创建一个名为 EventLogSourceInstaller 的“类库”。 在此项目中添加对 System.Configuration.Install.dll 的引用。 将自动产生的 Class1.cs 更名为 MyEventLo
gInstaller.cs。 在 MyEventLogInstaller.cs 中的写入以下代码:
using System; using System.Diagnostics; using System.ComponentModel; using System.Configuration.Install; namespace EventLogSourceInstaller {
[RunInstaller(true)] public class MyEventLogInstaller: Installer{ public EventLogInstaller myEventLogInstaller; public MyEventLogInstaller(){ //Create Instance of EventLogInstaller //创建日志 myEventLogInstaller = new EventLogInstaller(); // Set the Source of Event Log, to be created. //日志名字 myEventLogInstaller.Source = 名称指定为空 (为每一个类型 写一个方法来写入事件日志。
下面是自定义的通用类的代码片断: public void Error(string sourceName, string message){ EventLog eventLog = null; if (!(EventLog.SourceExists(sourceName))){ EventLog.CreateEventSource(sourceName,