代码之家  ›  专栏  ›  技术社区  ›  Shimrod

托管了WCF服务和log4net

  •  2
  • Shimrod  · 技术社区  · 14 年前

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

    我也试着把 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 在wcf的assemblyinfo.cs中的语句(它最初在utils的assemblyinfo.cs中),但没有任何成功。

    谢谢你的帮助,欢迎有任何想法!

    1 回复  |  直到 14 年前
        1
  •  1
  •   Community Jaime Torres    7 年前

    ConfigureAndWatch

    [assembly: log4net.Config.XmlConfigurator()]
    

    internal debugging