【问题标题】:Does setting TraceLogRetentionOption on EventSchemaTraceListener actually do anything?在 EventSchemaTraceListener 上设置 TraceLogRetentionOption 实际上有什么作用吗?
【发布时间】:2015-03-11 05:24:44
【问题描述】:

我希望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。

我做错了什么?

【问题讨论】:

    标签: c# trace tracesource


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢 — 我在文档中看到了这一点,并将其解释为当开始一个新的跟踪事件/数据/任何东西时,如果现有文件超过大小限制,侦听器应该创建一个新文件.无论如何,我尝试一次记录超过 1024 个字节,并没有影响结果。
    • 添加监听器并打印日志后,您能否打印出该监听器的最大文件大小恰好是多少?我很好奇它是否确实保留了这个阈值。
    • 你的意思是MaximumFileSize属性的值吗?在ts.TraceData 电话中仍然是1024。我现在的日志文件是 9867 字节。
    • 哦,我想通了。您实际上希望使用LimitedSequentialFiles 而不是UnlimitedSequentialFilesmsdn.microsoft.com/en-us/library/vstudio/…
    • Nup,很确定Unlimited 是我想要的。实际上,无论出于何种原因,它才刚刚开始工作。我发誓大约 2 小时后我才提出这个问题……但无论如何感谢您的帮助。
    【解决方案2】:

    好的,简而言之,问题出在屏幕和椅子之间。

    这里有一些技巧:

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

    【讨论】:

      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      相关资源
      最近更新 更多