设置事件日志属性刚刚创建的事件源

问题描述:

后,我有一些代码,创建一个新的事件源:设置事件日志属性刚刚创建的事件源

EventLog.CreateEventSource(Source, LogName); 

我知道,有一个潜伏期创建此。我想设置一些默认的EventLog属性。我在想:

EventLog log = new EventLog(); 
log.Source = Source; 
log.MaximumKilobytes = 16384; 
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0); 

是否有一些创造性的方式来做到这一点?

我想我可以定期检查EventLog.Exists(...),直到它返回true,但它似乎必须有一个更清洁的方式。

+0

我一直在寻找关于这个问题的东西。 – Mariusz 2011-04-19 16:14:13

这篇文章已经过时了,但我是通过谷歌搜索来到这里的,并且认为这可能会有用。

如果要创建一个事件日志源(而不是一个新的事件日志),您正在使用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

+0

有趣。所以也许我看到的延迟是因为我还没有记录任何东西...... – 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的倍数:)