2011-09-06 40 views
1
我在企业系统中使用 log4net

,该系统有三个层次:log4net的坚持与WCF

  1. API
  2. 内部通知的
  3. 集成到第三方:外部通知

这些图层通过WCF(wsHttpBinding)相互通话,每层都有一个日志文件。 当我运行一个测试工作流时,每一层执行他的工作,但记录器没有写任何东西。

任何想法?

回答

1

这里有一些想法:

  1. 在每一层,你必须log4net.Config.XmlConfigurator.Configure(...)打个电话?在大多数情况下,人们使用Assembly属性在AssemblyInfo.cs/Program.cs/Global.asax.cs/etc中执行此操作。但您也可以在应用程序启动例程中的某处调用它。 看到这个页面(“我什么时候应该登录我的第一条消息”):http://logging.apache.org/log4net/release/faq.html

  2. 如果您使用的是基于文件的日志记录,在这里你想存储日志文件? - 目标目录是否存在,并且运行该层的用户帐户是否具有对该文件夹的写入权限?对于Web应用程序,用户帐户是App Pool身份,对于Windows Services,用户帐户是运行该服务的登录。对于控制台和Windows应用程序,用户帐户可能是启动应用程序的用户。

如果一切都失败了,你可以打开log4net的内部调试这可能帮助:http://logging.apache.org/log4net/release/faq.html(“我如何启用log4net的内部调试”)

+0

我忘了说只有一层没有写入日志文件 –

+1

你是否知道你的问题? –

+0

是的。某些层表示“x”通过“y”向“z”发送同步呼叫,意思是“z”发送同步呼叫到“x”,而“x”没有退出呼叫。因此,记录器卡在死锁 –

0

我想你已经在App.config文件中配置了log4net?一个常见的错误是忘记在每层的启动代码中调用log4net.Config.XmlConfigurator.Configure()。如果这没有帮助,您需要向我们展示您的XML配置。

+0

我在每一层使用一个静态实例,并调用'log4net的。 “静态构造函数中的Config.XmlConfigurator.Configure()' –

+0

某些层称”x“通过”y“向”z“发送同步调用**意味着当”z“发送同步调用为”x“时,而”x“没有退出其呼吁。因此每个公共函数都以Logger.Debug(“--- started”)开头,并以Logger.Debug(“--- ended”)结尾,因此记录器被锁死。 –