日志记录不适用于WCF服务

时间:2014-05-06 03:50:25

标签: log4net

我有一个WCF服务图层。它有3个项目, 线束项目(调试解决方案),Windows服务项目和具有业务逻辑的类库(BL项目)。

我已经为BL项目配置了log4net,如下所示。

装配信息cs

// Configure log4net using the .config file 
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<log4netConfiguration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <appSettings>
    <add key="log4net.Config" value="log4net.config" />
  </appSettings>
  <log4net>   
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="C:\my_logs/my_service_logs/my_log_%date{ddMMyyyy}.log" />
      <appendToFile value="true" />      
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="30MB" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%4t %d{ABSOLUTE} %-5p %m%n"/>
        <!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />-->
      </layout>
    </appender>   
    <root>
      <level value="INFO" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</log4netConfiguration>

当我运行Harness项目时,日志记录工作完全正常。线束项目调用wcf服务,该服务响应传入的请求和日志而没有任何问题。

但是当我安装Windows服务时,以及通过网站登录调用BL时不起作用。

未为线束项目或Windows服务项目配置日志记录。

由于我一直在为不同的项目使用log4net,我确信我的配置是正确的。

但是为什么它在运行Windows服务时没有记录?这是某种安全问题吗? 对于日志文件/文件夹,我完全控制了所有用户。仍然没有记录。 请帮忙!

2 个答案:

答案 0 :(得分:1)

log4net documentation for assembly attributes说:

  

因此,如果使用配置属性,则必须调用log4net   允许它读取属性。一个简单的电话   LogManager.GetLogger将导致调用程序集上的属性   被阅读和处理。 因此必须进行日志记录   在应用程序启动期间尽早调用,以及   当然,在加载和调用任何外部程序集之前。

因此,您需要将程序集属性移动到Windows服务中,并将这样的内容添加到Main方法中:

 LogManager.GetLogger("This call initialises the logging system from the current assembly attributes");

答案 1 :(得分:0)

在没有更多代码的情况下,确切地指出了问题是什么,但我知道服务对于which folder they are running in来说可能很棘手。您应该尝试调试服务(在代码中使用System.Diagnostics.Debugger.Launch()自动附加到它)并检查它的当前目录是什么。