我有两个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}”开头。 我已经实现了它并且它正在工作。
此解决方案的问题在于它不是线程安全的,因此多个线程可以一起更改当前范围。因此范围没有意义。
你知道另一个已经实施/我需要实施的解决方案吗?
非常感谢。
答案 0 :(得分:1)
查看log4net上下文。 它们允许以编程方式向日志添加和删除属性:http://logging.apache.org/log4net/release/manual/contexts.html
特别要看一下ThreadContext。
布局可以访问上下文属性来呈现消息。
答案 1 :(得分:0)
如果您真的想要很好的可追溯性和层次结构,请尝试ReflectInsight。 https://insightextensions.codeplex.com