WAS托管了WCF服务和log4net

时间:2010-09-13 09:20:52

标签: wcf log4net was

尝试使用log4net登录我的应用程序时遇到问题。 我的应用程序包含一个WCF服务,以及连接到它的客户端。 在客户端进行日志记录不是问题,一切都运行良好。

以下是我的服务器端:

  • 一个WCF dll,它包含我的服务合同和基本实现(包括错误处理)。实际操作在单独的业务层中进行,该层抛出实现捕获的所需异常(并使用FaultContracts发回)。
  • 数据层(这里不是问题)。
  • “Utils”库,其中包含我的包装器日志方法。

我的log4net.config文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="false">

  <appender name="TechnicalFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
    <param name="File" value="c:\\log\\technical.log"/>
    <param name="AppendToFile" value="true"/>
    <param name="RollingStyle" value="Date"/>
    <param name="DatePattern" value="'_'yyyyMMdd-HH"/>
    <layout type="log4net.Layout.PatternLayout,log4net">
      <param name="ConversionPattern" value="%d [%-5t] %-5p - %m%n"/>
    </layout>
  </appender>

  <root>
    <level value="ALL"/>
  </root>

  <logger name="TechnicalLog">
    <level value="ALL"/>
    <appender-ref ref="TechnicalFileAppender"/>
  </logger>

</log4net>

因此,当业务层发生错误时,会捕获,记录并转换为FaultException。有问题。没有创建日志文件。 我用谷歌搜索并发现了一些线索(一般来说是访问权限,但是我使用了ProcMon,没有找到所需文件或目录的调用)。

我现在有点失落,我不知道该尝试什么。

我在visual studio中使用“publish”命令发布我的服务,所以在服务器上我有我的应用程序目录,里面有一个svc文件,一个web.config文件,然后是一个包含我所有dll的bin目录log4net.dll和log4net.config。 我试图在我的应用程序的根目录中复制该配置文件但没有成功。

我也试过放置 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 在我的WCF的AssemblyInfo.cs中声明(它最初在Utils的AssemblyInfo.cs中),但没有任何成功。

感谢您的帮助,欢迎任何想法!

1 个答案:

答案 0 :(得分:1)

我很确定log4net找不到配置文件。

我有同样的问题,我想我通过在web.config文件中包含应用程序设置来解决它,该文件包含log4net配置文件的完整路径。在我的包装器中,如果尚未配置log4net,我确保通过调用ConfigureAndWatch方法来配置log4net。

或者您可以简单地将log4net配置复制到web.config文件(但我不会这样做,因为您无法更改正在运行的系统的日志设置)。在这种情况下,您需要将此添加到AssemblyInfo.cs(或者您喜欢的其他文件):

[assembly: log4net.Config.XmlConfigurator()]

如果仍然无效,我建议您启用internal debugging