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

目的

使用System.Diagnostics执行跟踪。 虽然我使用了log4net和其他日志记录解决方案,但我只对跟踪使用System.Diagnostics感兴趣。

问题

即使我发出了TraceEvent ,也没有在任何地方创建文件。

应用信息

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

状态机初始状态

LogMessage自定义活动也很直接。 它收到四个基本参数:

LogMessage参数

TraceSource定义为变量:

LogMessage TraceSource变量

然后只需调用TraceEvent

LogMessage TraceEvent调用

组态

TraceSourceTraceListener的配置如下:

            

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

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

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

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

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

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

两件事情:

1)由于.config文件不正确,您的工作流很可能因exception而停止。 请注意更改:

          

2)你要冲洗听众,否则他们不会被写。 你可以用两种方式做到这一点。

使用InvokeMethod活动在您的记录器变量上显式调用Flush方法。

要么

打开配置文件上的自动刷新:

   ....  

话虽如此,我不知道您是否了解工作流跟踪和跟踪function。 它看起来非常适合您的需求。 请查看此答案以获取更多链接和示例。