代码改变世界

如何记录应用程序日志

2010-05-20 11:10  CuiWenKe  阅读(1053)  评论(0编辑  收藏  举报

将错误信息记录到Windows日志中.     选择自 rexsp 的 Blog  
关键字   错误信息 日志 
出处    
 http://dev.csdn.net/develop/article/27/27666.shtm
 引言:

任何一个系统都不可能一劳永逸,一直没有错误的运行下去,一个优秀的系统的出错处理也一定是优秀的,而一个好的程序员也一定会很观注可能出错的地方,并作出相应的容错处理。C#中的try catch其实已经为我们省了不少事情,本文并不是并不是对如何做出错处理进行论述的,而是给出一种收集出错信息,并将出错信息存储到Windows日志中的方案。

一、处理代码:

using System;

using System.Diagnostics;

using System.Text;

using System.IO;

 

namespace Town.Log

{

     /// <summary>

     /// 功能:错误日志类,将错误信息按指定事件日志名记录在系统日志

     /// </summary>

     public class Error

     {

         /// <summary>

         /// 记录日志

         /// </summary>

         /// <param name="sourceName">日志资源名,如:Town</param>

         /// <param name="message">错误信息</param>

         public static void Log(string sourceName, string message)

         {

              EventLog eventLog = null;

 

              // 确定日志是否存在

              if (!(EventLog.SourceExists(sourceName)))

              {

                   EventLog.CreateEventSource(sourceName, sourceName + "Log");

              }

 

              if (eventLog == null)

              {

                   eventLog = new EventLog(sourceName + "Log");

                   eventLog.Source = sourceName;

              }

              

              // 记录日志信息

              eventLog.WriteEntry(message, System.Diagnostics.EventLogEntryType.Error);

         }

     }

}

 

设置:因为系统日志的操作是有权限控制的,所以我们还要把对系统日志操作的权限赋给asp.net用户,方法如下:“开始->运行”,输入命令,“regedt32”,找到“System->CurrentControlSet->Services->Eventlog”,选择“安全->权限->添加”,然后找到本机的“AspNet”用户,加进来并且给读取权限就好了,加进来后目录中会多一个“aspnet_wp account”

二、调用方法

              try

              {

                   ……

              }

              catch (Exception ex)

              {

                   Error.Log("Town", ex.ToString());

                   return false;

              }

三、一点说明

系统出错后,会自动将出错信息记录到系统日志中,你可以在“开始->程序->管理工具->事件查看器”中发现一个新的项目“TownLog”,这便是记录出错信息的,如下图所示。
除上面提到的,如果你是要把自己程序产生的日志记录下来,如错误日志,可如下做:  
   
  //错误后记录到系统日志中;注意导入System.Diagnostics命名空间;注意在  
  //[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application建个该程序日志分支。  
  try  
  {  
  string   errorMessage="我的系统有错误发生,详细错误是"+Server.GetLastError();  
  Server.ClearError();  
  string   LogName="MyApplicationLog";  
  string   SourceName="我的错误日志";  
  if(!(EventLog.SourceExists(SourceName)))  
  {  
  EventLog.CreateEventSource(SourceName,LogName);  
  }  
  //insert   into   EventLog:  
  EventLog   MyLog=new   EventLog();  
  MyLog.Source=SourceName;  
  MyLog.WriteEntry(errorMessage,EventLogEntryType.Error);  
  }  
  catch  
  {  
  }  
  finally  
  {  
  }  
  }  
  记录错误日志如果不改注册表将会出现ASP.NET帐户访问注册表的权限问题,可以手工改注册表或做成.reg文件预先导入,Winform无此问题。  

public   class   Error   {  
  //记录错误日志位置  
  //string   str=ConfigurationSettings.AppSettings["ConnectionString"].ToString()  
  private   const   string   FILE_NAME   ="c:\\FengWuOAlog.txt";  
                    public   Error()   {}  
  ///   <summary>  
  ///   记录日志至文本文件  
  ///   </summary>  
  ///   <param   name="message">记录的内容</param>  
  public   static   void   Log(string   message)   {  
  if(File.Exists(FILE_NAME))  
  {  
  StreamWriter   sr   =   File.AppendText(FILE_NAME);  
  sr.WriteLine   ("\n");  
  sr.WriteLine("======================"+DateTime.Now.ToString()+"====================");  
  sr.WriteLine   (DateTime.Now.ToString()+message);  
  sr.Close();  
  }  
  else  
  {  
  StreamWriter   sr   =   File.CreateText(FILE_NAME);  
  sr.Close();  
  }