正在读取本地事件日志
本文关键字:事件 日志 读取 | 更新日期: 2023-09-27 18:20:31
这里我正在尝试使用c#读取本地系统事件日志,使用以下代码-
string eventLogText = "";
try
{
var eventLog = new EventLog("logname", "machinename");
foreach (var entry in eventLog.Entries)
{
eventLogText += entry;
}
}
catch (Exception eg)
{
MessageBox.Show(eg.Message);
}
它工作得很好,但问题是,在变量eventLogText中,我只得到System.Diagnostics.EventLogEntry重复,这可能是一个非常常见的错误,但我不知道该怎么办,因为我对c#和编程都很陌生。
其次,我想知道,如果系统没有使用Administrator帐户登录,在这种情况下,读取事件日志将导致任何异常或错误,如果会,解决方案是什么?
需要帮助。提前谢谢。
关于您的第一个问题,您只是将变量entry
添加到字符串中,该字符串正在调用该变量的ToString
方法。ToString的默认实现是返回类的名称。(因此重复System.Diagnostics.EventLogEntry
输出)
您需要使用EventLogEntry
类中的成员来检索您感兴趣的数据。例如,此控制台应用程序将打印应用程序事件日志中前10个条目的源和消息:
static void Main(string[] args)
{
StringBuilder eventLogText = new StringBuilder();
try
{
var eventLog = new EventLog("Application");
var tenMostRecentEvents = eventLog.Entries
.Cast<EventLogEntry>()
.Reverse()
.Take(10);
foreach (EventLogEntry entry in tenMostRecentEvents)
{
eventLogText.AppendLine(String.Format("{0} - {1}: {2}",
entry.Source,
entry.TimeWritten,
entry.Message));
}
Console.WriteLine(eventLogText.ToString());
}
catch (System.Security.SecurityException ex)
{
Console.WriteLine(ex);
}
Console.ReadLine();
}
关于第二个问题,您的代码需要适当的权限才能读取该事件日志。例如,如果我使用此行var eventLog = new EventLog("Security");
更改读取安全事件日志的代码,我将收到一个安全异常。您可以查看此答案以了解更多信息
希望它能有所帮助!