此配置添加了 2 个不同的跟踪源(使用文件侦听器;如果您愿意,您可能需要更改侦听器和目录路径):
<?xml version="1.0"?>
<configuration>
...
<system.diagnostics>
<switches>
<add name="data" value="All" />
<add name="error" value="All" />
</switches>
<sources>
<source name="DataSource" switchName="data" switchType="System.Diagnostics.SourceSwitch">
<listeners>
<clear />
<add name="dataListener" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
initializeData="FileLogWriter"
Append="true"
AutoFlush="true"
BaseFileName="data"
CustomLocation="D:\Log\App\Data"
DiskSpaceExhaustedBehavior="DiscardMessages"
Encoding="Unicode"
IncludeHostName="false"
LogFileCreationSchedule="Daily"
location="Custom"
MaxFileSize="900000000000" />
</listeners>
</source>
<source name="ErrorSource" switchName="error" switchType="System.Diagnostics.SourceSwitch">
<listeners>
<clear />
<add name="errorListener" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
initializeData="FileLogWriter"
Append="true"
AutoFlush="true"
BaseFileName="error"
CustomLocation="D:\Log\App\Error"
DiskSpaceExhaustedBehavior="DiscardMessages"
Encoding="Unicode"
IncludeHostName="false"
LogFileCreationSchedule="Daily"
location="Custom"
MaxFileSize="900000000000" />
</listeners>
</source>
</sources>
<trace autoflush="true">
<listeners>
<clear />
<add name="defaultListener" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
initializeData="FileLogWriter"
Append="true"
AutoFlush="true"
BaseFileName="program"
CustomLocation="D:\Log\App\Program"
DiskSpaceExhaustedBehavior="DiscardMessages"
Encoding="Unicode"
IncludeHostName="false"
LogFileCreationSchedule="Daily"
location="Custom"
MaxFileSize="900000000000" />
<add name="programConsoleListener" type="System.Diagnostics.ConsoleTraceListener" />
</listeners>
</trace>
</system.diagnostics>
...
</configuration>
并使用它定义您的 TraceSource:
static TraceSource dataSource = new TraceSource("DataSource");
static TraceSource errorSource = new TraceSource("ErrorSource");
为了更轻松地使用 TraceSource(对于某些场景),我编写了一个扩展方法:
public static void WriteLine(this TraceSource source, object o)
{
var str = (o ?? string.Empty).ToString();
if (source.Listeners == null || source.Listeners.Count == 0) throw new InvalidOperationException(string.Format("TraceSource named {0} has no listeners", source.Name));
foreach (TraceListener listener in source.Listeners)
listener.WriteLine(str);
}
这对我有用。
但您无法根据调用 TraceSource 的代码块对一个应用程序域中的 TraceSource 进行分类。