Log4net threadContext 与 IIS 中托管的 WCF 一起使用是不是安全?

Posted

技术标签:

【中文标题】Log4net threadContext 与 IIS 中托管的 WCF 一起使用是不是安全?【英文标题】:Is Log4net threadContext safe to use with WCF hosted in IIS?Log4net threadContext 与 IIS 中托管的 WCF 一起使用是否安全? 【发布时间】:2011-01-11 01:00:42 【问题描述】:

我在几个地方读到 log4net threadContext 在 asp.net 场景中使用是不安全的。这里有几篇文章:

Log4Net, ThreadContext, and Global.asaxhttp://piers7.blogspot.com/2005/12/log4net-context-problems-with-aspnet.html

所以我的方案是我想在 IIS 中托管的 WCF 层中使用 threadContext。线程上下文会好吗?我认为“单一”的并发模式可以做到这一点。

【问题讨论】:

有什么理由使用 log4net 而不是 MS Enterprise Library Logging 块?这适用于 asp.net / IIS 托管的 WCF 服务,并且每一点都可配置。 【参考方案1】:

由于 Log4net 是线程安全的,所以我认为不会有问题。

【讨论】:

但是 WCF 会在单线程中正确执行请求吗? asp.net 的问题在于,在某些情况下,请求可能会跳转到不同的线程,因此 log4net 中的 threadContext 将毫无用处。 @lemkept 在大多数情况下,当它到达您的代码时,WCF 将在单个线程上运行请求,因为正常情况是 WCF 仅调用您的一种方法来处理请求.但是,如果您对请求管道做任何事情,我不知道 WCF 将如何处理线程。 @PaulLemke 这是正确的,并且与我正在处理的应用程序的观察结果相匹配。因此,这可能不是正确的答案。【参考方案2】:

我使用 log4net 线程上下文来记录在 asp.net 应用程序和 wcf 服务中遇到错误的用户的身份。我没有遇到任何问题。这不是一个确定的答案,但您始终可以将您的服务与日志框架分离并测试 log4net 和线程上下文。如果您遇到任何问题,请删除您的线程上下文逻辑或插入一个新的日志框架,对您的服务逻辑影响最小。

【讨论】:

【参考方案3】:

我已经设置了一个 WCF 服务,托管在 IIS6 中,它使用 log4net 没有问题,无论并发模式如何。使用 threadContext 应该没有问题。

唯一需要注意的是,如果您将 log4net 设置从外部文件加载到 WCF 层,您可能必须在 IIS 中重新启动它才能获取更改。

【讨论】:

以上是关于Log4net threadContext 与 IIS 中托管的 WCF 一起使用是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

log4j 中“ThreadContext”的替代方案

在 log4j2 中从 ThreadContext 设置和获取值

Log4j2之ThreadContext

Log4j2之ThreadContext

log4net 使用与配置 每天一份log文件

log4net 与 TraceSource [关闭]