我们正在尝试对在 Windows Server 2008 R2 上运行的打印机进行一些内部打印审核。通过事件查看器启用日志后:
应用程序和服务日志 -> Microsoft -> Windows -> PrintService -> 操作
我通过定制答案成功地获取了 ID 307 的事件这个问题根据我的需要,然后将这些事件存储在数据库中以供其他应用程序使用。
// Build formatted query string
string eventID = "307";
string logSource = "Microsoft-Windows-PrintService/Operational";
string sQuery = String.Format("*[System/EventID={0}]", eventID);
// Define query and reader
var elQuery = new EventLogQuery(logSource, PathType.LogName, sQuery);
var elReader = new System.Diagnostics.Eventing.Reader.EventLogReader(elQuery);
// List for holding events
List<EventRecord> eventList = new List<EventRecord>();
for (EventRecord eventInstance = elReader.ReadEvent();
null != eventInstance; eventInstance = elReader.ReadEvent())
{
eventList.Add(eventInstance);
}
我现在无法做的是在保存这些事件后清除该日志。
它允许我从事件查看器中手动清除此日志,但运行:
public static void PrintLogs()
{
foreach (var eventLog in EventLog.GetEventLogs())
{
Console.WriteLine(eventLog.Log.ToString());
}
}
仅输出“应用程序和服务日志”下列出的更高级别的日志:
Application
HardwareEvents
Internet Explorer
Key Management Service
OAlerts // Not sure where OAlerts and
PreEmptive // PreEmptive are in the Event Viewer
Security
System
Windows PowerShell
答案是这个问题提示您不能使用 EventLog 类来访问 Microsoft-Windows-* 事件日志。
我可以采取什么措施以编程方式清除此特定事件日志(不仅是 307 事件,还包括操作日志中的其他事件)?
我想将这个小程序设置为每隔几分钟、几小时或几天自动运行一次,但现在需要大量检查数据库中的现有事件,并且只添加自上次运行以来的一些新事件跑了。