如何配置 .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);
如何配置 .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);