- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
2014 年 11 月 18 日更新 - 在浏览 log4net 源存储库时,我发现 LogicalThreadContext 的实现在 2011 年 11 月被修改为它使用 CallContext.LogicalSetData 存储其属性(并使用 LogicalGetData 获取它们)。这很重要,因为这意味着 LogicalThreadContext 现在应该可以正常工作。存储在 LogicalThreadContext 中的任何数据都应该“流动”到任何子线程或任务。这与 ThreadContext(以及 LogicalThreadContext 的旧实现)相比,其中存储在上下文中的数据将保留在当前线程的本地,而不是流向子线程/任务。
如果你有兴趣,这里是变化:
http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/Util/LogicalThreadContextProperties.cs?r1=1165341&r2=1207948&diff_format=h
希望遇到这个老问题的人会发现这些信息很有用。
log4net 提供了两个不同的“线程上下文”对象:ThreadContext和 LogicalThreadContext ,每个都有一个属性包,Properties。 ThreadContext 有一个 ThreadContextProperties包,而 LogicalThreadContext 有一个 LogicalThreadContextProperties包。
ThreadContext 可能更常被称为“MDC”。
LogicalContext 可能更常被称为“LDC”。
我将在本文的其余部分使用简称。
MDC.Properties 使用 System.Threading.Thread.SetData 实现而 LDC.Properties 是使用 System.Runtime.Remoting.Messaging.CallContext.SetData 实现的.
为了比较,NLog 只公开“MDC”(现在称为 MappedDiagnosticContext)来存储线程本地属性。 NLog的实现使用System.Threading.Thread.SetData,所以它的实现和log4net的一样。
在 log4net 和 NLog 中,“MDC”属性存储在字典中,字典本身存储在线程本地存储中。
在这种情况下,将字典存储在用 [ThreadStatic] 修饰的类成员变量中是否等效?
[ThreadStatic]
private static IDictionary<string, string> threadProperties;
最佳答案
警告:这是猜测。
假设您正在编写一个服务器,并且为请求提供服务意味着您必须与一堆不同的服务进行对话。作为一个完全现代的开发人员,您异步地发出这些请求,协调一切响应(或超时)以响应原始请求。
这意味着与单个请求对应的工作分散在许多不同的线程中(异步处理 Web 服务响应)。我怀疑 CallContext
用于将“我所做的一切都是因为这个传入请求”传播到不同的线程,以便您可以一起收集该请求的所有日志。 ThreadContext
不会有帮助。请注意,我假设所有工作都在单个 AppDomain 中执行,因此您担心不会有问题。
关于.net - log4net.ThreadContext 和 log4net.LogicalThreadContext 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3841075/
我正在尝试从 log4j-1.x 升级到 log4j-2.3 并在运行时出现以下错误。我缺少什么吗? public void debug(String msg) { appendContext
来自这个答案https://stackoverflow.com/a/25125159/4367326我有 routingAppender 工作,但我想为程序中的每个线程设置 ThreadContext
我有以下控制台附加程序; 问题是我在这里使用的模式输出一个空的 ThreadContext ({})。我不想使用特定的键名称(例如 %X{username}),因为系统非常
我们使用的是 Log4net 的 ThreadContext.Stacks,它运行良好。如果有多个 ThreadContext.Stacks["key"].Push(...),我的问题就来了。 使用简
我已经设置了 ThreadContext.Properties 并且需要在我的代码生命周期中更新它的值。过去我使用过 log4j MDC 并且不得不:MDC.remove(跟踪); 然后通过以下方式添
我的 AsP.NET 站点上运行着 log4net。我可以将消息记录到我的数据库表中,但它没有记录 ThreadContext 属性。例如: ThreadContext.Properties["Url
我正在尝试这个: Type ThreadContextType = typeof(Application).GetNestedType("ThreadContext", System.Reflecti
我一直在做一个使用 log4j2 的项目,在这个项目中我使用了 ThreadContext。现在我回到使用 log4j (1),它不提供 ThreadContext。 ThreadContext 有什
我有以下 Log4J2 配置 XML:
我不明白官方文档中的解释: 逻辑线程可以从一个托管线程跳转到另一个托管线程。 ThreadContext 和 ThreadLogicalContext 有什么区别?有人可以详细说明一下吗? 谢谢。 最
2014 年 11 月 18 日更新 - 在浏览 log4net 源存储库时,我发现 LogicalThreadContext 的实现在 2011 年 11 月被修改为它使用 CallContext.
我正在开发一个 Log4Net 配置,该配置将记录所有未处理的异常。我需要根据用户将某些属性添加到每个日志条目中。我已在 Application_Error 事件中按以下方式成功设置了此设置。这是我完
我只是想知道threadContext.put和MDC.put之间的区别。因为,我相信两者都在做相同的操作。 最佳答案 Log4j 2 continues with the idea of the M
看起来 Class.getResource() 使用 Class 类加载器并忽略 Thread 上下文类加载器,这不是我想要的。关于如何解决这个问题有什么建议吗? 最佳答案 只需获取当前线程类加载器并
有没有人试过同时堆叠context和使用Tasks? 我正在尝试这样的事情: using (log4net.ThreadContext.Stacks["contextLog"].Push("Savin
我想在我的 wcf 服务中使用以下内容在日志消息中记录用户: log4net.ThreadContext.Properties["user"] = this.currentUser.LoginName
在 Web 服务应用程序中,我使用静态方法设置 log4j ThreadContext 变量以进行日志记录,如下所示, public static void setLogParams(String c
总结一下这个问题,我在一个包中有一个公共(public)类,它在整个项目中使用。该类是一个 Aspect 类,它将值放入 ThreadContext(log4j2) 中,以便我们的日志记录将相应的 s
当停止运行我们基于 Wicket-6.19 的网站的 Tomcat 时,大量警告淹没了我们的日志文件: INFO: Stopping service Catalina Jul 06, 2015 8:1
我在一些地方读到 log4net threadContext 在 asp.net 场景中使用不安全。以下是几篇文章: Log4Net, ThreadContext, and Global.asax h
我是一名优秀的程序员,十分优秀!