设置事件日志属性刚刚创建的事件源
后,我有一些代码,创建一个新的事件源:设置事件日志属性刚刚创建的事件源
EventLog.CreateEventSource(Source, LogName);
我知道,有一个潜伏期创建此。我想设置一些默认的EventLog属性。我在想:
EventLog log = new EventLog();
log.Source = Source;
log.MaximumKilobytes = 16384;
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0);
是否有一些创造性的方式来做到这一点?
我想我可以定期检查EventLog.Exists(...),直到它返回true,但它似乎必须有一个更清洁的方式。
这篇文章已经过时了,但我是通过谷歌搜索来到这里的,并且认为这可能会有用。
如果要创建一个事件日志源(而不是一个新的事件日志),您正在使用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
有趣。所以也许我看到的延迟是因为我还没有记录任何东西...... – 2012-07-12 13:28:02
只是尝试这样做,并尽可能我可以告诉大家,不需要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的倍数:)
我一直在寻找关于这个问题的东西。 – Mariusz 2011-04-19 16:14:13