【问题标题】:Multiple Webservices with shared web.config logging to separate flat files with Ent Lib具有共享 web.config 日志记录的多个 Web 服务,以使用 Ent Lib 分隔平面文件
【发布时间】:2012-12-04 22:01:54
【问题描述】:

我正在做一个项目,我需要使用 Enterprise Library v.3.1.1.0 日志记录块(希望它是 log4net 或 nlog,但我别无选择)。我们有一个 IIS 应用程序,其中托管了多个 WCF Web 服务,它们共享一个 web.config 文件。这也是我无权改变的。

这些服务之前都没有实现任何日志记录。

因此,使用 Ent Lib Config 实用程序设置滚动平面文件侦听器并按照我想要的方式登录到文本文件非常简单。我遇到的问题是正确配置它,因此每个服务都可以拥有自己单独的日志文件,而它们仍然共享相同的 web.config。

我已经阅读了几个教程,但我不明白如何做到这一点。

有什么建议吗?

【问题讨论】:

  • 不知道为什么这会被关闭为完全重复;这是一个与链接的问题完全不同的问题,并且链接问题的答案根本没有回答我的问题。我需要知道如何从共享相同 web.config 的多个不同 Web 应用程序登录到多个平面文件。
  • 配置是静态的,因此每个配置的跟踪侦听器都会有一个文件。您可以将每个服务记录到使用不同跟踪侦听器的不同类别。
  • 谢谢 Tuzo,我想我并没有真正理解这样使用类别的概念。我想我必须以某种方式从每个不同的服务强制他们只登录到他们自己的类别 - 但我想我可以在 cmets 或其他东西中记录它。您是否知道通过原始类使用反射来路由日志事件?我知道您可以在开箱即用的 log4net 中做到这一点。
  • 没有开箱即用的方法来使用反射来路由日志事件。这可能是可能的,但您必须编写一些代码。您可以编写一个 Logger 外观类来根据调用者命名空间设置类别。 (另请注意,没有像 Log4Net 这样的命名空间通配符匹配。)
  • @Tuzo,我已经实现了您的建议,即为每个服务记录到单独的类别,并且效果很好。此外,您建议编写一个使用反射自动将日志记录到基于类或命名空间的某个类别的外观。如果您将其写为答案,我会将其标记为已接受并投赞成票;这是一个很好的解决方案。

标签: c# .net wcf logging enterprise-library


【解决方案1】:

web.config 中的配置是静态的,因此每个配置的跟踪侦听器都会有一个文件。实现每个服务一个文件的一种方法是将每个服务记录到不同的类别,并且每个类别使用不同的跟踪侦听器。这甚至可以以编程方式完成,以便服务可以在运行时添加自己的跟踪侦听器,尽管这比手动更新配置文件要先进一些(例如,确保服务只添加一次以及确保在更新配置时它是线程安全)。

Enterprise Library 没有类似于 log4net 的分层记录器的任何东西,因此没有开箱即用的方法来使用反射来根据原始类路由日志消息。这可能是可能的,但您必须编写一些代码。您可以编写一个 Logger 外观类来根据调用者命名空间设置类别。 (另请注意,没有类似 log4net 的命名空间通配符匹配。)

【讨论】:

    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2010-12-02
    • 2019-05-01
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多