• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > c#.NET中日志信息写入Windows日志中解决方案

c#.NET中日志信息写入Windows日志中解决方案

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了.net和c#的区别,c#和 net,c#和asp.net的区别,c#asp.net教程,c#转vb.net等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
1、 目的  
应用系统的开发和维护离不开日志系统,选择一个功能强大的日志系统解决方案是应用系统开发过程中很重要的一部分。在.net环境下的日志系统解决方案有许多种,log4net是其中的佼佼者。 
在Windows2000及以上操作系统中,有一个Windows日志系统,它包括应用程序(Application)事件日志、系统(System)日志和安全(Security)日志,事件日志也可以是自定义日志。在.net Framework中也提供了相应的类和接口来使用应用程序事件日志或者自定义事件日志。使用Windows日志可以使应用系统与操作系统更好的结合,与单纯使用自定义的日志系统相比,因为有了操作系统的支持,查询和管理日志更方便。在实际应用中,根据实际情况,可以选择一种合适的日志解决方案,也可以自定义日志系统和Windows日志系统两种日志解决方案同时使用。 
2、 使用Windows日志的方法  
2.1、方法概述  
在.net Framework中提供了一个类EventLog,使用EventLog类可以添加新的事件日志条目或从服务器事件日志中获取已有的条目。EventLog类包括一个WriteEntry()方法,可以用它来把一个新的事件写入到事件日志中。在写入一个新的条目到事件日志时,是使用特定的事件源(event source)来把条目写入到特定的事件日志中。 
事件源对于事件日志而言是唯一的。在Windows2000及以上操作系统中,包括一个事件日志:应用程序(Application)事件日志,还有系统(System)日志和安全(Security)日志,并且系统允许自定义事件日志。使用EventLog类,可以将日志条目添加到应用程序(Application)事件日志中,也可以添加到自定义事件日志中。事件源相当于事件日志的下一级目录,每一条日志条目都必须对应一个事件源。EventLog类可以创建一个自定义事件日志,也可以创建一个事件源,事件源可以创建在应用程序(Application)事件日志中,也可以创建在自定义事件日志中。Windows日志系统如下图所示:
为了便于不同应用系统之间的日志区分和查看方便,一般将事件源创建在自定义事件日志中,可以创建多个事件日志,一个事件日志也可以创建多个事件源。
2.2、事件日志和事件源创建方法 
创建一个新的事件日志或事件源时,其实是在对注册表添加一个条目。由于写注册表要求特殊的权限,所以在Web项目中创建事件日志和事件源就存在权限和安全的问题,Application项目中不存在此问题,本文重点讲述Web项目中Windows日志使用方法,Application项目中的使用方法类似于Web项目,抛弃掉Web项目中的权限和安全处理即可,本文不再赘述。
在Web项目中,当使用asp.net向系统中创建一个事件日志或者一个事件源时,可能会得到如下异常错误消息: System.Security.SecurityException: 不允许所请求的注册表访问权。这是因为运行asp.net进程的默认帐户是ASPNET(在IIS6.0下面是NetworkService),而此账户默认只有读权限,没有写权限,所以不能创建事件日志或事件源。解决此问题的办法有提升ASPNET帐户的权限、不在程序内部创建事件日志或事件源等,主要有以下三种解决方案:
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更名为MyEventLogInstaller.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 = "WebLog";
// Set the Log that source is created in
myEventLogInstaller.Log = "TDDN";
Installers.Add(myEventLogInstaller);
}
}
}
⑤     生成此项目,得到EventLogSourceInstaller.dll。
⑥     打开Visual Studio .NET 命令提示,转到EventLogSourceInstaller.dll所在目录。
⑦     运行此命令来创建事件日志和事件源,运行方法为:输入命令InstallUtil EventLogSourceInstaller.dll。
这样程序就在系统中创建一个事件日志:TDDN,在事件日志TDDN下创建了一个事件源:WebLog。
以上的这两种解决方案都是在应用系统运行之前,为系统手工添加事件日志和事件源,这样做没有安全权限问题,不存在安全隐患。更方便的方法还可以在应用系统运行时,让程序自动创建事件日志和事件源,这种方法必须提升ASPNET帐户的系统操作权限,或者给asp.net进程一个有更大权限的模拟帐号。模拟帐号的实现比较复杂,而且功能和安全性上和提升ASPNET帐户没有区别,这里采用的方法是提升ASPNET帐户的权限。以下是第三种解决方案:
C、  提升ASPNET帐户的权限可以直接在Windows系统管理中给ASPNET帐户添加对系统的读写权限,但是这样做存在很严重的安全问题,asp.net进程有直接读写操作系统的权限,将给系统带来很大的安全隐患。这里采用的提升ASPNET帐户权限的方法是只将系统日志的操作权限赋给ASPNET帐户,这样虽然还存在一定的安全隐患,但是隐患已经大大降低,并且可以在程序内部自由创建事件日志和事件源,极大的提高了灵活性。ASPNET帐户权限提升方法如下:
①     点击“开始”,“运行”,输入“regedit”,打开注册表编辑器。
②     在注册表编辑器中找到下列子键:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
③     在Eventlog项目上单击右键,在弹出的菜单中选择“访问许可”选项,然后找到本机的ASPNET帐户加进来,并赋予读写权限。
这样,ASPNET帐户就有了读写系统日志的权限,就可以在程序中根据情况自由创建事件日志和事件源了。在程序中创建事件日志和事件源的方法如下:
调用 EventLog类的CreateEventSource 方法并指定数据源字符串和要创建的事件日志名称,如果将事件日志名称指定为空 (""),事件日志名称将默认为Application,这样不会创建新事件日志,但会为应用程序(Application)事件日志创建指定的数据源。如果创建一个新的事件日志,则在确定事件日志名称是否唯一时将只计算指定字符串的前8 个字母。如下代码所示:
System.Diagnostics.EventLog.CreateEventSource("WebLog", "TDDN");
将创建一个事件日志为TDDN,在该事件日志下创建一个事件源WebLog。要在远程计算机上创建自定义事件日志,要将此计算机名指定为第三个参数。以下代码提供了一个示例:
System.Diagnostics.EventLog.CreateEventSource(" WebLog ", " TDDN ", "myserver");
将在远程计算机myserver上创建该事件日志和事件源。
2.3、写入Windows日志的方法 
事件日志与事件源创建的问题解决了,接下来就可以在程序中将日志信息写入到Windows系统日志中了。写入方法是,首先创建EventLog类的一个实例,将其Source属性与事件源名称相关联,最后调用WriteEntry方法来往事件日志中添加日志信息。下面是一段写入系统日志的简单示例代码:
EventLog eventLog = nul
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • .NET C#利用ZXing生成、识别二维码/条形码
  • C#.NET 图片水印添加代码
  • C#.net编程创建Access文件和Excel文件的方法详解
  • C#中使用ADOMD.NET查询多维数据集的实现方法
  • C#.NET采用HTML模板发送电子邮件完整实例
  • .net(c#)中的new关键字详细介绍
  • C#.NET字符串比较中忽略符号的方法
  • C#.net中的类型转换详细介绍
  • c#.net 常用函数和方法集
  • c#.net多线程编程教学——线程同步

相关文章

  • 2017-05-28登录验证全局控制的几种方式总结(session)
  • 2017-05-28Windows系统中使用C#编写蓝牙通信程序的简单实例
  • 2017-05-28基于Silverlight打印的使用详解,是否为微软的Bug问题
  • 2017-05-28asp.net获取系统当前时间的方法详解
  • 2017-05-28c# List find()方法返回值的问题说明(返回结果为对象的指针)
  • 2017-05-28C#实现去除Strings中空格的方法
  • 2017-05-28C#的path.GetFullPath 获取上级目录实现方法
  • 2017-05-28C#实现Base64处理的加密解密,编码解码示例
  • 2017-05-28简单实现C#异步操作
  • 2017-05-28C#实现的调用DOS命令操作类实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#中if语句使用概述
    • C# 基础入门--注释
    • C#判断指定分区是否是ntfs格式的方法
    • C#实现DataTable转换成IList的方法
    • C#预定义数据类型之值类型和引用类型介绍
    • C#接口实现方法实例分析
    • C#判断三角形的类型
    • c# 组合模式
    • C#中foreach语句使用break暂停遍历的方法
    • 浅谈c#中const与readonly区别

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有