如何为 WCF 配置 log4net

Posted

技术标签:

【中文标题】如何为 WCF 配置 log4net【英文标题】:How to configure log4net for WCF 【发布时间】:2011-01-27 15:24:03 【问题描述】:

在我的 asp webforms 应用程序中,我会进行 log4net 初始化;

log4net.Config.XmlConfigurator.Configure();

在 Application_Start 上的 global.asax 上,以便在应用程序启动时完成一次。

为 IIS 托管的 WCF 应用程序配置 log4net 的正确方法是什么(特别询问该行在哪里放置要使用的事件等),以便 log4net 被初始化一次并且没有不必要的初始化。

【问题讨论】:

【参考方案1】:

我通常在我的服务类的构造函数中这样做,但我会检查 log4net 是否已经配置:

if (!LogManager.GetRepository().Configured)  
  
  // configure log4net...  
 

我认为如果你真的想避免这种情况,你必须编写自己的服务工厂并在那里执行配置。

【讨论】:

【参考方案2】:

同样的事情:Application_Start。毕竟它是一个 ASP.NET 应用程序。对于自托管服务,您可以在启动主机之前配置log4net

【讨论】:

我添加了一个 global.asax 并通过 webconfig 和服务属性启用了 ASPNetCompatibility。我目前在 Application_BeginRequest 和 Session_Start 上受到打击,但 Application_Start 从未受到打击。知道为什么会发生这种情况吗?我在调试之前杀死了所有 w3wp 以确保应用程序第一次启动..【参考方案3】:

添加:

XmlConfigurator.Configure();

每个服务类的构造函数都对我有用。

【讨论】:

为提高您的帖子质量,请说明此代码将如何/为何解决问题。

以上是关于如何为 WCF 配置 log4net的主要内容,如果未能解决你的问题,请参考以下文章

WCF 数据服务和 EF4 CTP5,如何为查询配置默认的急切加载模式?

如何为 WCF 指定自定义 SoapAction

如何为现有的 WCF 服务原生启用 JSONP?

如何为 SOA 有效管理/托管许多 WCF 服务

如何为自托管 WCF 服务启用跨域调用

wcf 如何为 SOAP Web 服务设置不可为空的 DataMember