log4net:在两个不同的项目中使用dll时标识条目程序集

时间:2015-07-27 17:25:58

标签: c# log4net

我正在尝试找到解决此问题的简洁方法: 我有项目A和项目B都使用一个共同的DLL。 假设common有一个名为hello()的方法,它正在向日志写入内容

当我写入日志时,我想在日志中写一个关于调用是从项目A还是B中的dll开始的标识。

这甚至可能吗?

[我想到的一个解决方案是在A和B的开始序列中初始化记录器,然后将记录器存储在ThreadContext中。但问题是如果创建了一个新线程,记录器就会丢失)

1 个答案:

答案 0 :(得分:0)

您可以通过将%stacktrace {level}或%stacktracedetail {level}添加到转换模式来执行此操作。这将为您提供您在跟踪中的级别定义的堆栈帧数。假设你的类型告诉你什么dll正在打电话。

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%stacktrace{3}" />
  

栈跟踪

     

用于输出日志记录事件的堆栈跟踪   堆栈跟踪级别说明符可以括在大括号之间。对于   例如,%stacktrace {level}。如果没有堆栈跟踪级别说明符   给定1然后假设输出使用格式:type3.MethodCall3&gt;   type2.MethodCall2&gt; type1.MethodCall1此模式不可用   用于Compact Framework程序集。

     

stacktracedetail

     

用于输出   记录事件的堆栈跟踪堆栈跟踪级别说明符可以   括在括号之间。例如,%stacktracedetail {level}。如果   没有给出堆栈跟踪级别说明符,则假定输出使用1   格式:type3.MethodCall3(类型参数,...)&gt; type2.MethodCall2(型   param,...)&gt; type1.MethodCall1(type param,...)此模式不是   可用于Compact Framework程序集。