【问题标题】:WAS hosted WCF service and log4netWAS 托管 WCF 服务和 log4net
【发布时间】:2010-09-13 19:43:33
【问题描述】:

我在尝试使用 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 中使用“发布”命令发布我的服务,所以在服务器上我有我的应用程序目录,里面有一个 svc 文件、一个 web.config 文件,然后是一个包含我所有 dll 的 bin 目录,包括log4net.dll 和 log4net.config。 我试图将该配置文件复制到我的应用程序的根目录中,但没有成功。

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

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

【问题讨论】:

    标签: wcf log4net was


    【解决方案1】:

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

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

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

    [assembly: log4net.Config.XmlConfigurator()]
    

    如果这仍然没有帮助,那么我建议打开internal debugging

    【讨论】:

    • 您好 Stefan,感谢您的回答。我尝试了你的最后一个提议(将配置放在 web.config 中),但没有成功......我从 AssemblyInfo 文件中删除了所有“装配”条目,但它没有改变任何东西......我错过了什么吗?
    • 查看我修改后的答案。如果您在 web.config 中有配置,您仍然需要告诉 log4net 加载它。抱歉,解释不够清楚。
    • 它仍然无法正常工作......我还尝试硬编码配置文件的路径并使用 ConfigureAndWatch,但我得到一个拒绝访问异常(SecurityException)......这真的很奇怪,因为它与应用程序位于同一目录中。
    • 浏览未解决的旧问题...我终于使用了 NLog,我没有遇到任何问题。但是感谢您花时间思考我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多