如何配置 .NET TraceListener 以记录到 TEMP 文件夹

How can .NET TraceListener be configured to log to TEMP folder

如何配置 .NET TraceListener 以记录到 TEMP 文件夹? 是否可以在 app.config 中执行此操作,例如:

      <add type="System.Diagnostics.TextWriterTraceListener" 
          initializeData="%Temp%\logfilename.log"/>

.. 不做任何代码更改?

或者只有在代码中创建侦听器才能做到这一点?

您必须在代码中进行设置。

正如您在source code中看到的,构造函数立即分配给文件名而不解析文件名的内部结构。

 public TextWriterTraceListener(string fileName, string name) : base(name) {
            this.fileName = fileName; 
        } 

然后有一些代码来处理文件已经被锁定的可能性,但没有处理文件夹不可写的可能性(TEMP 通常是最后手段的可写文件夹)

    string fullPath = Path.GetFullPath(fileName);
                    string dirPath = Path.GetDirectoryName(fullPath); 
                    string fileNameOnly = Path.GetFileName(fullPath);
//more code
       fileNameOnly = Guid.NewGuid().ToString() + fileNameOnly;
                        fullPath = Path.Combine(dirPath, fileNameOnly);