0

我想System.Diagnostics.EventSchemaTraceListener生成一组无限的顺序文件,所以我用TraceLogRetentionOption.UnlimitedSequentialFiles. 但是,跟踪输出被写入单个文件而不是多个连续文件。

是否有关于使用此特定日志保留选项的任何官方或非官方文档或代码示例?如果做不到这一点,我下面的代码是否不正确?


为了减少魔法配置 woo,我将在代码中完成所有操作。这是我认为它应该被初始化的方式:

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文件被创建并包含所有预期的信息,但TraceLogRetentionOption由于单个文件的大小超过了指定的最大 1kB,因此不被尊重。

我究竟做错了什么?

4

2 回答 2

1

从外观上看,如果正在输出的消息的大小超过您指定的大小,则您施加的文件大小限制只是一个阈值。引用MSDN 的 MaximumFileSizeProperty 页面

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

于 2015-03-11T05:34:45.537 回答
0

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

这里有一些技巧:

  1. 缓冲区大小小于最大文件大小非常重要,我假设但在发布之前从未确认
  2. 根据您设置跟踪的方式,它似乎会在应用程序初始化时错过一段时间内向其抛出的任何请求。不知道为什么。
  3. 有时 Windows 资源管理器不会刷新目录中的文件列表。因此,在互联网上自欺欺人之前,请先检查一下。
于 2015-03-11T06:12:50.583 回答