log4net无法在自托管的wcf服务上运行

时间:2014-08-25 15:04:38

标签: c# wcf service log4net

我使用wcf编写了一个c#client-server应用程序。 客户端和服务器工作正常。我使用log4net将日志记录添加到我的wcf服务中。

当我在visual studio中开始我的服务时,日志记录工作正常。但是,当我使用我的控制台应用程序来托管我的wcfservice时,没有记录任何内容。 wcfservice正确运行并且可以访问。

这是我在wcfservice项目的app.config中的配置部分:

  <log4net xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:log4net">
<root>
  <level value="INFO"/>
  <appender-ref ref="name="FileAppender"/>
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
  <file value="d:\\_serverLib.log" />
  <appendToFile value="true" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="INFO" />
    <levelMax value="FATAL" />
  </filter>
</appender>

以下行被添加到我的wcfservice的assambyinfo.cs中:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

每个使用log4net的类都有对logger的引用:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

我的错在哪里?

2 个答案:

答案 0 :(得分:0)

假设您的配置设置正确且可供应用访问,则可能this as stated in the documentation

  

使用属性可以是一种更清晰的方法来定义   应用程序的配置将从中加载。不过值得   注意到属性纯粹是被动的。它们仅供参考。   因此,如果使用配置属性,则必须调用log4net   允许它读取属性。一个简单的电话   LogManager.GetLogger将导致调用程序集上的属性   被阅读和处理。 因此必须进行日志记录   在应用程序启动期间尽早调用,以及   当然,在加载和调用任何外部程序集之前

因此,在加载WCF服务之前,您需要在控制台应用程序的主程序中调用LogManager.GetLogger(您实际上不必记录任何内容)

答案 1 :(得分:0)

如果有人遇到此问题并且无法找到解决方案,那么我的问题是当我的项目设置为.NET 4.5.1时我从nuget添加了log4net。我不得不将我的项目支持到.NET 4.5 - 但是log4net仍然试图使用4.5.1。我不得不更改packages.config中的值:

<package id="log4net" version="2.0.3" targetFramework="net45" />

这解决了我的问题。