即使调用了TraceEvent,也没有创建跟踪文件?

Mik*_*oud 0 .net c# logging system.diagnostics workflow-foundation-4

目的

使用System.Diagnostics进行跟踪.虽然我已经使用过log4net和其他日志记录解决方案,但我只对跟踪工作感兴趣System.Diagnostics.

问题

即使我发出的TraceEvent文件没有在任何地方创建.

应用信息

我有一个托管一些WF服务的应用程序.其中一个服务是状态机,其初始状态如下所示:

状态机初始状态

在LogMessage自定义活动也非常直截了当.它接收四个基本参数:

LogMessage参数

将TraceSource变量定义为:

LogMessage TraceSource变量

然后简单地调用TraceEvent:

LogMessage TraceEvent调用

组态

这种情况的结构TraceSource和TraceListener如下:

  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="log" switchValue="All">
        <listeners>
          <add name="file" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
               BaseFileName="gsf_workflows.txt"
               DiskSpaceExhaustedBehavior="ThrowException"
               Location="Custom"
               CustomLocation="D:\Log"
               MaxFileSize="81920000"
               LogFileCreationSchedule="LogFileCreationScheduleOption.Daily"/>
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
Run Code Online (Sandbox Code Playgroud)

Sha*_*son 10

仅供参考,所有人都在这个页面上磕磕绊绊..

如果文件夹丢失,FileLogTraceListener将不会创建文件夹.

FileLogTraceListener不会绕过安全性,您的进程标识将需要在目标文件夹上创建+修改权限.

目标可执行文件夹是"糟糕的形式",这往往会根据主机而改变(例如,在IIS Express下编写时,您没有写入与DevEnv相同的位置,也没有写入托管的Web应用程序.)一个建议是您可能希望选择"自定义"并指定特定路径(例如X:\ logfiles)而不是"ExecutableLocation"

写入器在内部缓冲区填满时刷新到磁盘,如果内存为我提供,则默认缓冲区大小为8KB.这不是跟踪侦听器的一个方面,而是它写入的基础文件流.

最后,如果您不需要FileLogTraceListener的形式和功能,而是考虑跟踪EventLog(有一个监听器),因为这可能更容易被其他开发人员和非开发人员访问(例如ops工程师,第三方监控工具等)