我正在尝试读取应用 EventLoggingApp 的事件日志。问题是为我的单一来源(EventLoggingApp)读取日志。
此代码读取每个源的日志。问题是什么?有什么建议?
static void ReadEvenLog()
{
string eventLogName = "Application";
string sourceName = "EventLoggingApp";
string machineName = "Tom";
EventLog eventLog = new EventLog();
eventLog.Log = eventLogName;
eventLog.Source = sourceName;
eventLog.MachineName = machineName;
foreach (EventLogEntry log in eventLog.Entries)
{
Console.WriteLine("{0}\n",log.Source);
}
}
答案 0 :(得分:18)
试试这个:
EventLog log = new EventLog("Security");
var entries = log.Entries.Cast<EventLogEntry>()
.Where(x => x.InstanceId == 4624)
.Select(x => new
{
x.MachineName,
x.Site,
x.Source,
x.Message
}).ToList();
答案 1 :(得分:4)
在MSDN上查看此article。您无法按源读取事件日志条目。只有日志名称很重要。相反,您可以通过验证foreach循环中每个条目的Source属性,为您的应用程序或过滤条目创建单独的事件日志。
答案 2 :(得分:1)
MSDN (1) (2)表示Source仅用于编写事件日志。
仅从日志中读取时不必指定Source。您只能为EventLog实例指定日志名称和MachineName(服务器计算机名称)属性。在任何一种情况下,条目成员都会自动填充事件日志的条目列表。您可以为此列表中的项目选择适当的索引以读取各个条目。 (1)
答案 3 :(得分:0)
我不确定你在控制台上打印的是什么。如果您尝试打印的每个事件日志条目中都是消息,那么在foreach
循环内您应该改为:
Console.WriteLine(log.Message + "\n");
答案 4 :(得分:-2)
如果连接到localhost,请将MachineName设置为“。” 检查用户是否有权从事件日志中读取