ASP.Net預設情況下,是沒有寫系統日誌的許可權的。要在ASP.Net中寫系統日誌,首先我們要先有其許可權。我們可以通過設定或修改註冊表的許可權來解決。
方法1:“開始->運行”,輸入命令,“regedt32”,找到“System->CurrentControlSet->Services->Eventlog”,選擇“安全->許可權->添加”,然後找到原生“AspNet”使用者,加進來並且給讀取許可權就好了,加進來後目錄中會多一個“aspnet_wp account”
方法2:在註冊表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\EventLog增加User的完全操縱許可權
using System;
using System.Diagnostics;
using System.Text;
namespace CorePlus.Framework.Utility
{
/// <summary>
/// 寫日誌的CLASS
/// </summary>
public class LogUtility
{
public enum EVENT
{
/// <summary>重大錯誤</summary>
EVENT_ERROR,
/// <summary>操作失敗</summary>
EVENT_FAILUREAUDIT,
/// <summary>一般資訊</summary>
EVENT_INFORMATION,
/// <summary>有效,成功的操作</summary>
EVENT_SUCCESSAUDIT,
/// <summary>警告</summary>
EVENT_WARNING,
}
private static TextWriterTraceListener listner = null;
/// <summary>
/// 建構函式
/// </summary>
public LogUtility () {}
/// <param name="loginID">登入ID</param>
/// <param name="screenID">畫面ID</param>
/// <param name="level">警告層級</param>
/// <param name="message">日誌資訊</param>
public static void Logging (
string loginID,
string screenID,
EVENT level,
string message )
{
// 變數定義
StringBuilder outputMessage = null; // 輸出的資訊
string targetLevelString = null;
EventLogEntryType Eventtype = new EventLogEntryType();
switch (level)
{
case EVENT.EVENT_ERROR:
Eventtype = EventLogEntryType.Error;
break;
case EVENT.EVENT_FAILUREAUDIT:
Eventtype = EventLogEntryType.FailureAudit;
break;
case EVENT.EVENT_INFORMATION:
Eventtype = EventLogEntryType.Information;
break;
case EVENT.EVENT_SUCCESSAUDIT:
Eventtype = EventLogEntryType.SuccessAudit;
break;
case EVENT.EVENT_WARNING:
Eventtype = EventLogEntryType.Warning;
break;
}
// 日誌資訊的拼合
outputMessage = MakeMessage( loginID, screenID, targetLevelString, message );
// 寫日誌
Logging( Eventtype, outputMessage.ToString() );
}
/// <summary>
/// 向日誌管理器寫日誌
/// </summary>
/// <param name="level">錯誤層級</param>
/// <param name="message">輸出的資訊</param>
private static void Logging ( EventLogEntryType level, string message )
{
// 變數定義
string logName = null; // 日誌名
string machineName = null; // 機器名
string sourceName = null; // SourceName
EventLog eventLog = null; // EventLog
logName = "Eventlog2"; // 日誌名
machineName = "."; // 機器名
sourceName = "Eventlog2"; // SourceName
eventLog = new EventLog( logName, machineName, sourceName );
eventLog.WriteEntry( message,level );
eventLog = null;
}
/// <summary>
/// 日誌最終拼合
/// </summary>
/// <param name="loginID">登入ID</param>
/// <param name="screenID">畫面ID</param>
/// <param name="levelString">錯誤層級</param>
/// <param name="message">日誌資訊</param>
/// <returns>輸出的日誌資訊</returns>
private static StringBuilder MakeMessage (
string loginID,
string screenID,
string levelString,
string message )
{
// 變數定義
StringBuilder retMessage = new StringBuilder();
retMessage.Append( "【登入ID】" );
retMessage.Append( loginID );
retMessage.Append( "\n【畫面ID】" );
retMessage.Append( screenID );
retMessage.Append( "\n【錯誤層級】" );
retMessage.Append( levelString );
retMessage.Append( "\n【錯誤資訊】\n" );
retMessage.Append( message );
return retMessage;
}
}
}
// 在FORM中輸出日誌
private void button1_Click(object sender, System.EventArgs e)
{
LogUtility.Logging( "bbbbbb","22222222",LogUtility.EVENT.EVENT_ERROR,"3333333" );
}
運行完程式後開啟日誌管理器看看~~~~~~~~~怎麼樣?不錯吧,呵呵.
另一個方法
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace Log
{
class LogWirter
{
/// <summary>
/// 事件來源名稱
/// </summary>
private string eventSourceName;
EventLogEntryType eventLogType;
public LogWirter()
{
eventSourceName = "test";
eventLogType = EventLogEntryType.Error;
}
/// <summary>
/// 訊息事件來源名稱
/// </summary>
public string EventSourceName
{
set { eventSourceName = value; }
}
/// <summary>
/// 訊息事件類型
/// </summary>
public EventLogEntryType EventLogType
{
set { eventLogType = value; }
}
/// <summary>
/// 寫入系統日誌
/// </summary>
/// <param name="message">事件內容</param>
public void LogEvent(string message)
{
if (!EventLog.SourceExists(eventSourceName))
{
EventLog.CreateEventSource(eventSourceName, "Application");
}
EventLog.WriteEntry(eventSourceName, message, EventLogEntryType.Error);
}
}
}