【发布时间】:2018-03-13 23:26:49
【问题描述】:
我有一个带有 log4net 的 C# 项目。 log4net 配置打印每一行的堆栈跟踪详细信息,例如:
<param name="LogPattern" value="[%date] %stacktracedetail{3} %m" />
然而,这使得这些行有点不可读,因为堆栈跟踪会打印每个方法的完全限定类名。就连参数名称都以System为前缀:
[2018-03-14 12:14:02,265] a.b.class1.myMethod(System.String param1, System.Int32 param2) > a.b.class2.myMethod(System.String param1, System.Int32 param2) > a.b.class3.myMethod(System.String param1, System.Int32 param2) logmessage
如何删除完全限定的类名?例如:
[2018-03-14 12:14:02,265] class1.myMethod(String param1, Int32 param2) > class2.myMethod(String param1, Int32 param2) > class3.myMethod(String param1, Int32 param2) logmessage
【问题讨论】:
-
框架本身只适用于完全限定的类名。使用指令允许编译器推断类名的其余部分,如果它们是明确的。我个人觉得你不应该覆盖这个。或者至少仅适用于非常特定的内置类型(如字符串和 int)并且仅在显示期间。在原始日志中,最好将所有信息至少包含一次。但要查看日志,您可以将“System.String”替换为“String”。一个简单的 Dictionary
、一个循环和 String.Replace 就可以完成这个操作。
标签: c# logging log4net log4net-configuration