C# 与发布模式相比,log4net在调试模式下使用不同的xml配置文件

C# 与发布模式相比,log4net在调试模式下使用不同的xml配置文件,c#,xml,log4net-configuration,C#,Xml,Log4net Configuration,我有一个webapp,在调试模式下运行时,与在发布模式下运行时相比,我希望使用不同的log4net配置文件 我使用的是log4net版本2.0.3 在我的AssemblyInfo.cs类中,我有以下代码: #if DEBUG [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4netDebug.xml", Watch = true)] #else [assembly: log4net.Config.XmlConfigur

我有一个webapp,在调试模式下运行时,与在发布模式下运行时相比,我希望使用不同的log4net配置文件

我使用的是log4net版本2.0.3

在我的AssemblyInfo.cs类中,我有以下代码:

#if DEBUG
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4netDebug.xml",     Watch = true)]
#else
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4netLive.xml", Watch = true)]
#endif
log4net.Config.XmlConfigurator.Configure(); 
log = LogManager.GetLogger(typeof(GlobalApp));
<?xml version="1.0" encoding="utf-8"?>
<!-- Configuration for logging using log4net-->
<configuration>
<configSections>
<section name="log4net"  type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!-- Show logging in the Visual Studio output window-->
<appender name="TraceAppender"
      type="log4net.Appender.TraceAppender" >
<layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%-6level - %message%newline" />
</layout>
</appender>
<appender
        name="AdoNetAppender"
        type="log4net.Appender.AdoNetAppender">
    <threshold>INFO</threshold>
    <bufferSize
    value="1" />
    <connectionType
    value="System.Data.SqlClient.SqlConnection, System.Data,  Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=BLAH;initial  catalog=BLAH;integrated security=True;persist security info=True" />
<commandText value="INSERT INTO Logs ([Date],[Thread],[Source],[Level],  [Logger],[Message],[Exception],[HostName]) VALUES (@log_date, @thread, 'LOG SOURCE',@log_level, @logger, @message, @exception, @hostname)" />
    <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%thread" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@hostname" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%property{log4net:HostName}" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="-1" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="-1" />
        <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
</appender>
<root>
    <level value="ALL" />
    <!-- Show logging in the Visual Studio output window-->
    <appender-ref ref="TraceAppender" />
    <appender-ref ref="AdoNetAppender" />
</root>
</log4net>
</configuration>
在我的Global.asax.cs类中,我有以下代码:

#if DEBUG
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4netDebug.xml",     Watch = true)]
#else
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4netLive.xml", Watch = true)]
#endif
log4net.Config.XmlConfigurator.Configure(); 
log = LogManager.GetLogger(typeof(GlobalApp));
<?xml version="1.0" encoding="utf-8"?>
<!-- Configuration for logging using log4net-->
<configuration>
<configSections>
<section name="log4net"  type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!-- Show logging in the Visual Studio output window-->
<appender name="TraceAppender"
      type="log4net.Appender.TraceAppender" >
<layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%-6level - %message%newline" />
</layout>
</appender>
<appender
        name="AdoNetAppender"
        type="log4net.Appender.AdoNetAppender">
    <threshold>INFO</threshold>
    <bufferSize
    value="1" />
    <connectionType
    value="System.Data.SqlClient.SqlConnection, System.Data,  Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=BLAH;initial  catalog=BLAH;integrated security=True;persist security info=True" />
<commandText value="INSERT INTO Logs ([Date],[Thread],[Source],[Level],  [Logger],[Message],[Exception],[HostName]) VALUES (@log_date, @thread, 'LOG SOURCE',@log_level, @logger, @message, @exception, @hostname)" />
    <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%thread" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@hostname" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%property{log4net:HostName}" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="-1" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="-1" />
        <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
</appender>
<root>
    <level value="ALL" />
    <!-- Show logging in the Visual Studio output window-->
    <appender-ref ref="TraceAppender" />
    <appender-ref ref="AdoNetAppender" />
</root>
</log4net>
</configuration>
(日志是GlobalApp的公共静态成员。) 在log4netDebug.xml文件中,我有以下代码:

#if DEBUG
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4netDebug.xml",     Watch = true)]
#else
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4netLive.xml", Watch = true)]
#endif
log4net.Config.XmlConfigurator.Configure(); 
log = LogManager.GetLogger(typeof(GlobalApp));
<?xml version="1.0" encoding="utf-8"?>
<!-- Configuration for logging using log4net-->
<configuration>
<configSections>
<section name="log4net"  type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!-- Show logging in the Visual Studio output window-->
<appender name="TraceAppender"
      type="log4net.Appender.TraceAppender" >
<layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%-6level - %message%newline" />
</layout>
</appender>
<appender
        name="AdoNetAppender"
        type="log4net.Appender.AdoNetAppender">
    <threshold>INFO</threshold>
    <bufferSize
    value="1" />
    <connectionType
    value="System.Data.SqlClient.SqlConnection, System.Data,  Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=BLAH;initial  catalog=BLAH;integrated security=True;persist security info=True" />
<commandText value="INSERT INTO Logs ([Date],[Thread],[Source],[Level],  [Logger],[Message],[Exception],[HostName]) VALUES (@log_date, @thread, 'LOG SOURCE',@log_level, @logger, @message, @exception, @hostname)" />
    <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%thread" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@hostname" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%property{log4net:HostName}" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="-1" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="-1" />
        <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
</appender>
<root>
    <level value="ALL" />
    <!-- Show logging in the Visual Studio output window-->
    <appender-ref ref="TraceAppender" />
    <appender-ref ref="AdoNetAppender" />
</root>
</log4net>
</configuration>

信息
我已经测试了这个配置脚本,如果我把它放在web.config文件中,它就会工作。 log4netDebug.xml文件设置了“始终复制”属性

当我尝试这样做时: System.IO.FileInfo fi=new System.IO.FileInfo(“Log4NetDebug.xml”); log4net.Config.XmlConfigurator.ConfigureAndWatch(fi)

这也不行。
我已经阅读了几个stackoverflow和其他网页,描述了如何做到这一点,我似乎正在做他们建议我做的事情,但它似乎仍然不起作用

你知道为什么吗?

如果你查看这个类,你会发现它需要新文件的完全限定名或相对文件名

因此,当您执行此操作时,
System.IO.FileInfo fi=new System.IO.FileInfo(“Log4NetDebug.xml”)您需要指定文件的完整路径

由于这是在web应用程序中,您可能需要以下内容:

var logFile = new FileInfo(Path.Combine(HttpRuntime.BinDirectory, "Log4NetDebug.xml"));