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

时间:2015-02-22 20:26:01

标签: c# multithreading logging

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

第一个Dll'Addll'有一个异步函数,它记录并行并且每个调用都有一个唯一的id。 此函数正在使用第二个dll'Bddll',它也会记录。

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}”开头。 我已经实现了它并且它正在工作。

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

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

非常感谢。

2 个答案:

答案 0 :(得分:1)

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

特别要看一下ThreadContext。

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

答案 1 :(得分:0)

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