C#3.0杂谈(1):使用EventLog类写Windows事件日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
           操作系统: Windows XP SP3
            开发工具: Visual Studio 2008
                 语言: C# 3.0 
 .net Framework: 3.5
    在程序中经常需要将指定的信息(包括异常信息和正常处理信息)写到日志中。在C#3.0中可以使用EventLog类将各种信息直接写入Windows日志。EventLog类在System.Diagnostics命名空间中。我们可以在“管理工具” > "事件查看器“中可以查看我们写入的Windows日志,如下图所示:

下面是一个使用EventLog类向应用程序(Application)写入日志的例子,日志类型使用 EventLogEntryType枚举类型指定。
EventLog log  =   new  EventLog();
try
{
    log.Source 
=   " 我的应用程序 " ;
    log.WriteEntry(
" 处理信息1 " , EventLogEntryType.Information);
    log.WriteEntry(
" 处理信息2 " , EventLogEntryType.Information);
    
throw   new  System.IO.FileNotFoundException( " readme.txt文件未找到 " );
}
catch  (System.IO.FileNotFoundException exception)
{
    log.WriteEntry(
" 处理信息2 " , EventLogEntryType.Error);
}

    在运行上面的代码后,将会写入如下图所示的日志信息。
 
 
其中WriteEntry方法的第一个参数指定的信息通过双击相应的日志可以查看,如下图所示。
 
在默认情况下,EventLog类将日志写在Application事件里,通过EventLog的构造方法的参数也可以指定其他的日志,如系统(System)事件,但要注意在向非Application事件写日志信息时,需要先使用CreateEventSource方法将事件源添加到当前事件中。下面的例子演示了如何向“系统”事件中添加日志信息:
EventLog log  =   new  EventLog( " System " );
//   首先应判断日志来源是否存在,一个日志来源只能同时与一个事件绑定s
if ( ! EventLog.SourceExists( " My Application " ))
    EventLog.CreateEventSource(
" My Application " " System " );
try
{
    log.Source 
=   " My Application " ;
    log.WriteEntry(
" 处理信息1 " , EventLogEntryType.Information);
    log.WriteEntry(
" 处理信息2 " , EventLogEntryType.Information);
    
throw   new  System.IO.FileNotFoundException( " readme.txt文件未找到 " );
}
catch  (System.IO.FileNotFoundException exception)
{
    log.WriteEntry(exception.Message, EventLogEntryType.Error);
}
    在执行上面的代码后,向System事件写入的日志如下图所示。
 
我们也可以通过EventLog类的添加自己的事件,代码如下:
EventLog log  =   new  EventLog( " MyEvent " );
//   首先应判断日志来源是否存在,一个日志来源只能同时与一个事件绑定s
if ( ! EventLog.SourceExists( " New Application " ))
    EventLog.CreateEventSource(
" New Application " " MyEvent " );
try
{
    log.Source 
=   " New Applications " ;
    log.WriteEntry(
" 处理信息1 " , EventLogEntryType.Information);
    log.WriteEntry(
" 处理信息2 " , EventLogEntryType.Information);
    
throw   new  System.IO.FileNotFoundException( " readme.txt文件未找到 " );
}
catch  (System.IO.FileNotFoundException exception)
{
    log.WriteEntry(exception.Message, EventLogEntryType.Error);
}
     上面的代码添加了一个MyEvent事件,添加后的事件查看器界面如下图所示。
 
从上图可以看出,左侧的事件查看器中多了个MyEvent事件。
    我们还可以使用EventLog类来枚举指定事件中的日志,如下面的代码所示:
 
if  (EventLog.Exists( " MyEvent " ))
{
    EventLog log 
=   new  EventLog( " MyEvent " );
    
foreach  (EventLogEntry entry  in  log.Entries)
    {
        textBox1.Text 
+=  entry.Message  +   " : " ;
    }
}
    上面的代码枚举了刚才建立的MyEvent事件中的所有日志,并输出了每一个日志的信息(就是WriteEntry方法的第一个参数指定的信息)。除此之外,我们还可以使用Delete方法删除指定的事件,使用DeleteEventSource方法删除日志源。
    在写入Windows事件日志时要注意,如果事件日志文件已满,可以在事件属性对话框(在事件右键菜单中选择“属性”菜单项会弹出该对话框)中增加日志文件的大小,或清空当前事件中的日志。事件属性对话框如下图所示。





 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/214966,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
2月前
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
76 2
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
44 2
|
1月前
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
40 0
|
1月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
11 0
|
1月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
40 0
|
1月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
59 0
|
3月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
125 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
2月前
|
存储 运维 监控
超级好用的C++实用库之日志类
超级好用的C++实用库之日志类
38 0
|
2月前
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
25 2