我正在尝试找到解决此问题的简洁方法: 我有项目A和项目B都使用一个共同的DLL。 假设common有一个名为hello()的方法,它正在向日志写入内容
当我写入日志时,我想在日志中写一个关于调用是从项目A还是B中的dll开始的标识。
这甚至可能吗?
[我想到的一个解决方案是在A和B的开始序列中初始化记录器,然后将记录器存储在ThreadContext中。但问题是如果创建了一个新线程,记录器就会丢失)
答案 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程序集。