我在我的应用程序中使用 TextWriterTraceListener ( System.Diagnostics )来跟踪异常等几件事情......
应用程序在终端服务器上运行,如果有许多用户同时使用它,则侦听器开始在文件名中创建许多带有随机 GUID 的跟踪文件。
是否存在避免此行为的可能性或变通方法?
答案 0 :(得分:13)
我刚看了TextWriterTraceListener的文档,并且有关于页面下方1/3的说明
如果尝试写入正在使用或不可用的文件,则文件名自动以GUID为前缀
所以,这似乎是设计上的。如果文件确实不可用,那么使用当前实现无法完成任何操作。您可以尝试做的是编写TextWriterTraceListener的自定义实现,该实现覆盖相关的Write / WriteLine方法,以便输出转到每个用户的文件,其名称更适合您的需要。
如果您希望从终端服务器上的所有用户进行所有日志记录转到单个文件,那么您几乎肯定需要运行“拥有”该文件的某种“第三方”进程,同步对它的写入,例如随后由自定义TextWriterTraceListener调用的Windows服务
答案 1 :(得分:0)
修复是否意外多次调用 Trace.Listeners.Add(xxx listener)?
因为如果您添加了多个监听器,当您调用 Trace.writeline(); 时,它们也会写入所有监听器;
当您关闭应用程序时,本地 IIS 也可能继续使用该文件。