首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为多个文件日志记录的多个请求设置Log4Net上下文?

为多个文件日志记录的多个请求设置Log4Net上下文?
EN

Stack Overflow用户
提问于 2016-10-05 15:36:00
回答 1查看 540关注 0票数 0

我们正在尝试使用请求到WCF服务的log4net日志进程。为此,我们的目标是根据请求的某些参数登录不同的文件。为此,我们使用了log4net的上下文属性,在每次对服务的调用中设置了它的上下文,但是,由于可能存在并发问题,我们不能使用"GlobalContext“。

如果认为wcf每个调用使用一个线程(似乎考虑错了),我们在收到请求时设置ThreadContext属性,如下所示:

代码语言:javascript
复制
GlobalContext.Properties("fulldate") = Now.ToString("yyyyMMdd")
GlobalContext.Properties("date") = Now.ToString("yyyyMM")

ThreadContext.Properties("center") = center //it comes with the request header

XmlConfigurator.Configure()

并在配置文件中定义了附录,如下所示:

代码语言:javascript
复制
<appender name="IntAppender" type="log4net.Appender.FileAppender"> 
<file type="log4net.Util.PatternString" value="c:\\Logs\\%property{center}\\%property{date}\\%property{fulldate}\\theLog.log" /> 
<datePattern value=".yyyyMMdd.'log'" /> 
<appendToFile value="true" /> 
<layout type="log4net.Layout.PatternLayout"> 
  <conversionPattern value="%date [%thread] %-5level - [%ndc] %message%newline" /> 
</layout> 

但有时,一个中心日志中应该包含的日志位于另一个中心的日志中,问题似乎在于WCF如何管理线程。我不想将服务设置为每个请求的实例。您能告诉我WCF如何管理线程的链接或文档吗?我没能找到一个。有可能完成我想做的事吗?也就是说,在该中心的日志文件中记录一个中心的所有请求。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-06 09:09:09

这是行不通的,这与WCF的线程模型无关。

Log4net在记录器之间,从而在线程之间共享您定义的单个附录。当一个线程更改文件附录上的文件值时,这将适用于所有线程,因此查看错误实际上在哪个日志中结束是一个争用条件!

要做到这一点,您需要每个日志文件,每个“中心”有一个文件附录。如果预先知道这些中心,您可以在配置中设置它们,否则就很容易实现按程序设置它们

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39878264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档