C# 仅在创建事件源后设置事件日志属性

C# 仅在创建事件源后设置事件日志属性,c#,logging,event-log,C#,Logging,Event Log,我有一些创建新事件源的代码: EventLog.CreateEventSource(Source, LogName); 我知道创建这个有一个延迟。我想设置一些默认事件日志属性。我的想法大致如下: EventLog log = new EventLog(); log.Source = Source; log.MaximumKilobytes = 16384; log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0); 是否有一些

我有一些创建新事件源的代码:

EventLog.CreateEventSource(Source, LogName);
我知道创建这个有一个延迟。我想设置一些默认事件日志属性。我的想法大致如下:

EventLog log = new EventLog();
log.Source = Source;
log.MaximumKilobytes = 16384;
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0);
是否有一些创造性的方法同时做到这一点


我想我可以定期检查事件日志。存在。。。直到它返回真的,但似乎必须有一个更干净的方法。

这篇文章很旧,但我是通过谷歌搜索来这里的,我认为这可能有用

如果要创建事件日志源而不是新的事件日志,则使用ModifyOverflowPolicy应用的设置实际上适用于整个事件日志,而不是刚刚创建的源

因此,您应该能够做到这一点:

string LogName = "Application";
EventLog.CreateEventSource(Source, LogName);

EventLog log = new EventLog(LogName);
log.MaximumKilobytes = 16384;
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0);
属性log.Source仅在要写入日志时使用:

否则,您可以编写信息日志,例如创建事件日志以强制创建日志:

在第一个条目写入日志之前,不会创建日志。


就我所知,ModifyOverflowPolicy调用并不需要设置最大文件大小。此外,最小大小似乎是1MB,即使调用接受较低的值。任何接受的值都以字节的形式存储在注册表中,但GUI和测试显示最小值为1028KB。值得注意的是,GetEventLogs调用返回从注册表派生的大小,而不是实际的1MB限制

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位上测试。
我还注意到,实际文件大小比您设置的大小大4KB。在GUI中,这对于最小大小1028 KB是可见的,但所有较大的值都是64的倍数:

我一直在寻找关于这个问题的信息。有趣。所以我看到的延迟可能是因为我还没有记录任何东西。。。