如何在客户端和WCF服务之间共享log4net记录器?

时间:2017-07-28 15:39:02

标签: c# wcf logging log4net

我在我的控制台应用程序中使用log4net来记录执行期间的不同步骤和错误。在处理期间,应用程序将数据发送到WCF服务,其中数据用于执行某些操作。

我希望我的控制台应用程序中的客户端记录器设置与WCF服务共享,以便我也可以在我的WCF服务中使用它。有可能吗?

客户端应用程序中的log4net配置:

<log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Logs\\log_" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="yyyyMMdd_HHmmss.\tx\t" />
      <param name="StaticLogFileName" value="false" />
      <maximumFileSize value="100KB" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>

    <appender name="ErrorsAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Logs\\errorlog_" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="yyyyMMdd_HHmmss.\tx\t" />
      <param name="StaticLogFileName" value="false" />
      <maximumFileSize value="100KB" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="ERROR" />
        <levelMax value="FATAL" />
      </filter>
    </appender>

    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFileAppender" />
      <appender-ref ref="ErrorsAppender" />
    </root>
  </log4net>

在WCF服务中:

public class SyncService : ISyncService
{
    public ILog log { get; set; }

    public void GetLogger(ILog _log)
    {
        log = _log;
    }
}

接口文件:

namespace SyncService
{
    [ServiceContract]
    public interface ISyncService
    {

        [OperationContract]
        void GetLogger(ILog _log);
    }
}

最后在客户端应用程序中,我尝试将记录器传递给WCF服务:

// Setup communication with WCF service
SyncService.SyncServiceClient syncclient = new SyncService.SyncServiceClient();

// Pass logger to WCF service
syncclient.GetLogger(log);

我收到错误:

  

无法序列化方面:输入&#39; log4net.Core.LogImpl&#39;在集会中   &#39; log4net [...]

如何将记录器传递给我的WCF服务?

0 个答案:

没有答案