在EventSchemaTraceListener上设置TraceLogRetentionOption实际上做了什么吗?

时间:2015-03-11 05:24:45

标签: c# trace tracesource

我希望System.Diagnostics.EventSchemaTraceListener生成一组无限的顺序文件,所以我用TraceLogRetentionOption.UnlimitedSequentialFiles初始化了一个。但是,跟踪输出被写入一个文件而不是多个顺序文件。

是否有使用此特定日志保留选项的官方或非官方文档或代码示例?如果不这样,我的代码下面的代码是否有任何错误?


为了减少魔法配置,我会在代码中做所有事情。以下是我认为它应该被初始化的方式:

TraceSource ts = new TraceSource("My trace source", SourceLevels.All);
SourceSwitch sourceSwitch = new SourceSwitch("SourceSwitch", "Verbose");
ts.Switch = sourceSwitch;
ts.Listeners.Add(new System.Diagnostics.EventSchemaTraceListener(
  "event.log", // "file name"
  "eventschema", // "name"
  1024, // buffer in bytes - I set this to be <= maximum file size
  TraceLogRetentionOption.UnlimitedSequentialFiles,
  1024); // max. file size in bytes - very small to illustrate the concept

然后我记录了几次:

for (var i = 0; i < aFew; i++) {
  ts.TraceData(
    TraceEventType.Information, // trace level
    100, // event ID: arbitrary integer
    "some data to output");
}

我观察到创建了一个event.log文件并包含了所有预期信息,但由于单个文件的大小超过了指定的最大1kB,因此不会尊重TraceLogRetentionOption

我做错了什么?

2 个答案:

答案 0 :(得分:1)

从它的外观来看,如果输出的消息大小超过您指定的大小,则您施加的文件大小限制只是一个阈值。引用MSDN's MaximumFileSizeProperty page

  

属性值由构造函数中的maximumFileSize参数或配置文件中的maximumFileSize属性设置。出于性能原因,应将最大文件大小设置为1024字节的倍数。 MaximumFileSize属性值不是绝对值; 这是一个阈值,可以超过最后一条消息的大小。

答案 1 :(得分:0)

好的,简短的版本是问题出在屏幕和椅子之间。

这里有一些技巧:

  1. 非常重要缓冲区大小小于最大文件大小,我假设但在发布之前从未确认
  2. 根据您设置跟踪的方式,在应用程序初始化时,它似乎会错过任何抛出的请求一段时间。不确定原因。
  3. 有时,Windows资源管理器不会刷新目录中的文件列表。所以在互联网上愚弄自己之前先检查一下。