支持层次结构和线程安全的 .Net 记录器

.Net logger that support hierarchy and thread safety

我有两个 dll。两者都在使用 log4Net 和 log.

第一个 Dll 'A.dll' 有一个并行记录的异步函数,并且每个调用都有一个唯一的 ID。 此函数正在使用第二个 dll 'B.dll' 也记录。

logger.Log("Is about to enter B function");
B.somefucntion();

问题是我有多个来自 'A.dll' 和 'B.dll' 的日志,但我无法在它们之间进行连接。

我无法将函数的唯一 ID 发送到 'B.dll'(这是一个我无法修改的扩展 dll)。

我想到了一个解决方案,在 'A.dll' 中打开一个范围,并且在这个范围之间的每个登录都将添加到这个范围下 + 它的消息。

logger.Log("Is about to enter B function");
using (logger.Scope("Bla bla " + id))
{
   B.somefucntion();
}

那么 'B.dll' 中出现的每个日志都将以 "Bla bla + {id}" 开头。 我已经实现了它并且它正在运行。

这个解决方案的问题是它不是线程安全的,所以多个线程可以一起改变当前范围。因此范围没有意义。

你知道另一个已经实施/我需要实施的解决方案吗?

非常感谢。

看看 log4net 上下文。 它们允许以编程方式向您的日志添加和删除属性:http://logging.apache.org/log4net/release/manual/contexts.html

特别是,看看 ThreadContext。

布局可以访问上下文属性以呈现消息。

如果您真的想要出色的可追溯性和层次结构,请尝试 ReflectInsight。 https://insightextensions.codeplex.com