在config中为Tracesource TextWriterTraceListener输出添加自定义路径

时间:2012-08-07 10:50:34

标签: c# path app-config relative-path trace

所以我使用Tracesource记录一些错误,并且不想在用户本地Windows文档结构中创建日志文件(类似System.Environment.SpecialFolder.LocalApplicationData)。

但是我不知道我是否可以在配置文件中做任何类似的事情。

<system.diagnostics>
    <trace autoflush="true"/>
    <sources>
        <source name="MainSource"
              switchName="MainSwitch"
              switchType="System.Diagnostics.SourceSwitch" >
            <listeners>
                <add name="LogFileListener" />
            </listeners>
        </source>
    </sources>
    <sharedListeners>
        <add name="LogFileListener"
           type="System.Diagnostics.TextWriterTraceListener"
           initializeData="This is the place the output file goes to"
           traceOutputOptions="ProcessId, DateTime, Callstack" />
    </sharedListeners>
    <switches>
        <add name="MainSwitch" value="Verbose" />
    </switches>
</system.diagnostics>

initializeData是我认为构造函数的参数,是我必须放置自定义路径的地方。

2 个答案:

答案 0 :(得分:2)

配置文件中日志文件的路径是绝对路径,不能由任何特殊变量承担。

但是,您可以动态创建它,这应该可以解决您的问题

How to: Create and Initialize Trace Sources

答案 1 :(得分:2)

以下是我用于选项的示例代码。它可以帮助您理解架构。

Configuration exeConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

ConfigurationSection diagnosticsSection = exeConfiguration.GetSection("system.diagnostics");

ConfigurationElementCollection switches = diagnosticsSection.ElementInformation
                                                            .Properties["switches"]
                                                            .Value as ConfigurationElementCollection;

foreach (ConfigurationElement switchElement in switches)
{
    Debug.WriteLine("switch: name=" + 
        switchElement.ElementInformation.Properties["name"].Value +
        " value=" + 
        switchElement.ElementInformation.Properties["value"].Value);
}