雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

使用C#實現(xiàn)寫入系統(tǒng)日志

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊:

因為我不想使用自己寫文件,我的軟件是綠色的,所以把日志寫到 Windows 日志。

首先告訴大家什么是系統(tǒng)日志,請看下面

如果需要寫日志,需要管理員權限,如果沒有權限會出現(xiàn)下面異常

System.Security.SecurityException:“未找到源,但未能搜索某些或全部事件日志。 不可訪問的日志: Security

需要判斷當前是否已經(jīng)存在日志,下面我來創(chuàng)建一個事件叫 “德熙”

if (EventLog.SourceExists("德熙"))
  {
  EventLog.CreateEventSource("德熙", "Application");
  }

這里的 Application 就是寫到哪個,一般都是選 Application ,可以從圖片看到系統(tǒng)的有應用程序、安全、Setup、系統(tǒng)幾個日志,程序一般都是寫到程序

寫日志

寫日志就不用管理權限

寫入可以使用 WriteEntry ,需要傳入寫入的日志和內(nèi)容

EventLog.WriteEntry("德熙", "有個不愿告訴你名稱的程序在這里寫字符串");

這個方法還有幾個重載,可以傳入日志類型,是成功、失敗還是其他。還可以傳入 id ,通過id 可以找到為什么需要寫日志,不過需要在自己定義,還可以添加附件,于是我就不需要自己寫文件日志。

 

另外給大家附上一個完整例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ConsoleApp
{
 /// <summary>
 /// 系統(tǒng)日志
 /// </summary>
 public class PackSystemEventLog
 {
  /// <summary>
  /// 錯誤信息
  /// </summary>
  private static string ErrorInfo { get; set; }
  /// <summary>
  /// 創(chuàng)建系統(tǒng)事件日志分類
  /// </summary>
  /// <param name="eventSourceName">注冊事件源(比如說這個日志來源于某一個應用程序)</param>
  /// <param name="logName">日志名稱(事件列表顯示的名稱)</param>
  /// <returns></returns>
  public static bool CreateSystemEventLogCategory(string eventSourceName, string logName)
  {
   bool createResult = false;
   try
   {
    if (!EventLog.SourceExists(eventSourceName))
    {
     EventLog.CreateEventSource(eventSourceName, logName);
    }
    createResult = true;
   }
   catch (Exception ex)
   {
    createResult = false;
    ErrorInfo = ex.Message;
   }
   return createResult;
  }
  /// <summary>
  /// 刪除系統(tǒng)事件日志分類
  /// </summary>
  /// <param name="eventSource">EventName事件源</param>
  /// <returns></returns>
  public static bool RemoveSystemEventSourceCategory(string eventSource)
  {
   bool createResult = false;
   try
   {
    if (EventLog.SourceExists(eventSource))
    {
     EventLog.DeleteEventSource(eventSource, ".");
    }
    createResult = true;
   }
   catch (Exception ex)
   {
    createResult = false;
    ErrorInfo = ex.Message;
   }
   return createResult;
  }
  /// <summary>
  /// 向系統(tǒng)日志中寫入日志
  /// </summary>
  /// <param name="eventSource">事件源</param>
  /// <param name="msg">寫入日志信息</param>
  /// <param name="type">日志文本分類(警告、信息、錯誤)</param>
  /// <returns></returns>
  public static bool WriteSystemEventLog(string eventSource, string msg, EventLogEntryType type)
  {
   bool writeResult = false;
   try
   {
    if (!EventLog.SourceExists(eventSource))
    {
     writeResult = false;
     ErrorInfo = "日志分類不存在!";     
    }
    else
    {
     EventLog.WriteEntry(eventSource, msg, type);
     writeResult = true;
    }
   }
   catch (Exception ex)
   {
    writeResult = false;
    ErrorInfo = ex.Message;
   }
   return writeResult;
  }
  /// <summary>
  /// 刪除事件源中l(wèi)ogName(好像刪除了所有的該分類的日志)
  /// </summary>
  /// <param name="eventSource"></param>
  /// <param name="logName"></param>
  /// <returns></returns>
  public static bool RemoveSystemEventLog(string eventSource, string logName)
  {
   bool removeResult = false;
   try
   {
    if (!EventLog.SourceExists(eventSource))
    {
     removeResult = false;
     ErrorInfo = "日志分類不存在!";
    }
    else
    {
     EventLog.Delete(logName);
     removeResult = true;
    }
   }
   catch (Exception ex)
   {
    removeResult = false;
    ErrorInfo = ex.Message;
   }
   return removeResult;
  }
  /// <summary>
  /// 獲取錯誤信息
  /// </summary>
  /// <returns></returns>
  public static string GetErrorMessage()
  {
   return ErrorInfo;
  }
 }
}

上一篇:C++通過Callback向C#傳遞數(shù)據(jù)的方法

欄    目:C#教程

下一篇:大家應該掌握的多線程編程

本文標題:使用C#實現(xiàn)寫入系統(tǒng)日志

本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5294.html

網(wǎng)頁制作CMS教程網(wǎng)絡編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權所有