我在我的应用程序中使用 TextWriterTraceListener(System.Diagnostics)来跟踪多个事项,例如异常。
该应用程序在终端服务器上运行,如果有许多用户同时使用,则侦听器开始创建具有随机GUIDs的许多跟踪文件名。
是否有可能或变通方法来避免这种行为?
我在我的应用程序中使用 TextWriterTraceListener(System.Diagnostics)来跟踪多个事项,例如异常。
该应用程序在终端服务器上运行,如果有许多用户同时使用,则侦听器开始创建具有随机GUIDs的许多跟踪文件名。
是否有可能或变通方法来避免这种行为?
因此,这似乎是按设计进行的。如果文件确实不可用,则目前的实现无法解决任何问题。你可以尝试编写自定义的TextWriterTraceListener实现,覆盖相关的Write/WriteLine方法,以便输出到文件,每个用户都有一个更适合你需求的名称。如果尝试写入正在使用或不可用的文件,则文件名将自动添加GUID前缀。
我目前正在测试在我的输出方法中添加 System.Diagnostics.Trace.Listeners.Clear()...
// Upon a new day re-create the TextWriterTraceListener to update our file name...
if (_date?.Day != DateTime.Now.Day) { _listener = null; }
if (_listener == null)
{
System.Diagnostics.Trace.Listeners.Clear();
_fileName = $"{DateTime.Now.ToString("yyyy-MM-dd")}_Trace.json";
// Add a writer that appends to the trace.log file:
_listener = new System.Diagnostics.TextWriterTraceListener(_fileName);
_listener.IndentSize = 4;
_listener.TraceOutputOptions = System.Diagnostics.TraceOptions.None; // TraceOptions.DateTime | TraceOptions.ThreadId;
System.Diagnostics.Trace.AutoFlush = true;
System.Diagnostics.Trace.Listeners.Add(_listener);
// Obtain the Console's output stream, then add that as a listener...
System.Diagnostics.Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(Console.Out));
}
修复是不小心多次调用Trace.Listeners.Add(xxx listener)吗?
因为如果添加了多个侦听器,当您调用Trace.writeline()时,它们会向所有侦听器写入。
此外,本地IIS在关闭应用程序时可能仍在使用该文件。