我有一些代码可以创建一个新的事件源:
EventLog.CreateEventSource(Source, LogName);
我知道创建它有延迟。我想设置一些默认的EventLog属性。我正在考虑以下几点:
EventLog log = new EventLog();
log.Source = Source;
log.MaximumKilobytes = 16384;
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0);
是否有一些创造性的方法同时做到这一点?
我想我可以定期检查EventLog.Exists(...),直到它返回true,但似乎必须有一个更清洁的方式。
答案 0 :(得分:4)
这篇文章很老了,但我是通过搜索google来到这里的,并认为这可能很有用。
如果 您正在创建事件日志源(而不是新的事件日志),则您使用ModifyOverflowPolicy
应用的设置实际上是整体事件日志,而不是您刚刚创建的来源。
因此你应该能够这样做:
string LogName = "Application";
EventLog.CreateEventSource(Source, LogName);
EventLog log = new EventLog(LogName);
log.MaximumKilobytes = 16384;
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0);
属性log.Source
仅在您要写入日志时使用:http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.source.aspx
否则,您可以编写信息日志(例如,创建事件日志)以强制创建日志:
在写入第一个条目之前,不会创建日志。 http://msdn.microsoft.com/en-us/library/2awhba7a.aspx
答案 1 :(得分:1)
试过这个,据我所知,只需设置最大文件大小就不需要ModifyOverflowPolicy()
调用。此外,即使调用接受较低的值,最小大小似乎也是1 MB。任何可接受的值都存储在注册表中(以字节为单位),但GUI和测试显示1028 kB是最小值。值得注意的是GetEventLogs()
调用返回从注册表派生的大小,而不是实际的1 MB限制。
if (!System.Diagnostics.EventLog.SourceExists(this.eventSourceName))
{
System.Diagnostics.EventLog.CreateEventSource(this.eventSourceName, this.eventLogName);
if (!string.IsNullOrEmpty(this.eventLogMaxSizeKB))
{
System.Diagnostics.EventLog myEventLog = new System.Diagnostics.EventLog(this.eventLogName);
long RoundedToLowest64k = (long.Parse(this.eventLogMaxSizeKB) / 64) * 64;
myEventLog.MaximumKilobytes = RoundedToLowest64k;
}
}
在Windows 7 64位和2008 R2 64位上测试。 我还注意到实际文件大小比你设置的大4 kB。在GUI中,最小尺寸可见1028 kByte,但所有较大的值都是64的倍数:)