在一个解决scheme中用于项目和unit testing的log4netconfiguration

我的解决scheme包含一个Windows服务应用程序项目和一个unit testing项目,如下所示:

在这里输入图像说明


——————- Windows服务应用程序项目安装——————–


我在Windows服务应用程序项目中设置了log4net,如下所示:

步骤1)我已经将log4net的引用添加到我的Windows服务应用程序项目。

第2步)我的app.config如下所示:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> </configSections> <log4net> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="log.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="5" /> <maximumFileSize value="100KB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %level %logger - %message %exception%newline" /> </layout> </appender> <root> <level value="ALL" /> <appender-ref ref="LogFileAppender" /> </root> </log4net> </configuration> 

第3步)我已经添加了这个Program.cs主:

 using System; using System.Collections.Generic; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace MyAppService { static class Program { /// <summary> /// The main entry point for the application. /// </summary> static void Main() { log4net.Config.XmlConfigurator.Configure(); 

第4步)在我login的类中,我添加了这个:

 private static ILog logger = LogManager.GetLogger(typeof(Reader)); 

第5步)我已经添加了这样的日志语句:

 logger.Info("Data Read Completed Successfully."); 

—————————–unit testing项目设置—————– ———–


我在我的unit testing项目中设置了log4net,如下所示:

步骤1)我已经将log4net的引用添加到我的unit testing项目。

第2步)我已经添加了一个app.config文件,如下所示:

  <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="log4net.Internal.Debug" value="true"/> </appSettings> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <log4net> <!-- A1 is set to be a ConsoleAppender --> <appender name="A1" type="log4net.Appender.FileAppender"> <file value="logfile.txt" /> <appendToFile value="false" /> <!-- A1 uses PatternLayout --> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" /> </layout> </appender> <!-- Set root logger level to DEBUG and its only appender to A1 --> <root> <level value="DEBUG" /> <appender-ref ref="A1" /> </root> </log4net> </configuration> 

步骤3)我已经添加了ForecastIOTest.csunit testing类:

 using log4net; using log4net.Config; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using WeatherAppService; [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace WeatherAppTests { [TestClass] public class ForecastIOTest { private static ILog logger = LogManager.GetLogger(typeof(WeatherController)); [AssemblyInitialize] public static void Configure(TestContext tc) { log4net.Config.XmlConfigurator.Configure(); } 

第4步)在我的testing类中,我正在logging我已经添加了这个:

 private static ILog logger = LogManager.GetLogger(typeof(ForecastIOTest)); 

第5步)我已经添加了这样的日志语句:

 logger.Info("This is a test."); 

– – – – – – – – – – – – – – – – – – -问题 – – – – – – ————————


现在,我收到的错误表明我有多个configSections元素:一个在服务应用程序中,另一个在testing应用程序中。

 log4net:ERROR Exception while reading ConfigurationSettings. Check your .config file is well formed XML. System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> System.Configuration.ConfigurationErrorsException: Only one <configSections> element allowed per config file and if present must be the first child of the root <configuration> element. (C:\Users\pdl\Documents\Visual Studio 2013\Projects\WeatherAppService\WeatherAppTests\bin\Debug\WeatherAppTests.dll.config line 9) 

但是,如果我从testing应用程序中删除configSections,我收到此错误:

 log4net:ERROR Exception while reading ConfigurationSettings. Check your .config file is well formed XML. System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> System.Configuration.ConfigurationErrorsException: Unrecognized configuration section log4net. (C:\Users\pdl\Documents\Visual Studio 2013\Projects\WeatherAppService\WeatherAppTests\bin\Debug\WeatherAppTests.dll.config line 7) 

– – – – – – – – – – – – – – – – – – -题 – – – – – – ————————


有谁知道如何设置log4net,所以我可以运行unit testing,运行服务应用程序,并将我的日志文件写入? 或者,考虑到我所做的一切,有人可以告诉我什么是不正确的或不完整的?

错误是因为,configSection应该是配置文件中的<Configuration>之后的第一个元素。 <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> </configSections>

<ConfigSections>元素指定配置和处理程序声明,所以它必须是<Configuration>的第一个子项