2

尝试使用 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文件,然后是一个bin目录,里面有我所有的dll,包括log4net。 dll 和 log4net.config。我试图将该配置文件复制到我的应用程序的根目录中,但没有成功。

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

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

4

1 回答 1

1

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

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

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

[assembly: log4net.Config.XmlConfigurator()]

如果这仍然没有帮助,那么我建议打开内部调试

于 2010-09-13T09:40:27.360 回答