如何将每次执行的唯一threadID与log4net输出相关联?

时间:2010-07-08 03:36:36

标签: c# .net log4net

我正在使用log4net,当我记录消息时,我的threadID将在我的文件中重复...我希望它是一个uniqueID,它在文件中永远不会存在两次,这样它便于搜索。我希望这是正确的。基本上我的转换模式包括这些项目

  <conversionPattern value="%date [%hex_thread] %method %-5level %logger – %message%newline"/>

这是我的输出:

2010-07-08 11:12:32,426 [B] methodC INFO methodC - inside method C

2010-07-08 11:12:58,316 [B]方法C INFO方法C - 内部方法C

2010-07-08 11:13:09,284 [A]方法C INFO方法C - 内部方法C

2010-07-08 11:15:04,214 [B]方法C INFO方法C - 内部方法C

其中hex_thread是十六进制的threadID。您可以看到[B]多次发生,因为执行时间不同,所以不应该这样做。所以,我想让它也独一无二。这样它的东西就不会出现在那条线的任何地方。就像“0b87007”这样的东西,如果我搜索它将是唯一出现在整行。我怎样才能做到这一点?

已编辑添加我的修复

我的threadId以十六进制格式打印,所以我只是将几个字符附加到输出中......就像这样....

long id = System.Threading.Thread.CurrentThread.GetHashCode(); String str = id.ToString("X"); writer.Write("0x0000"+str);

然后输出看起来像这样

2010-07-09 10:07:37,917 [0x00004] methodC INFO methodC - message

2010-07-09 10:07:37,917 [0x0000B] methodC INFO methodC - message

1 个答案:

答案 0 :(得分:2)

只要您使用相同的线程,您将拥有相同的线程ID。您需要为每个操作创建一个新线程,并自己为其分配一个唯一的ID。

从您的问题来看,您似乎希望为日志文件中的每一行都拥有唯一的ID。不确定为什么要这样做,但如果这是目标,你不应该使用线程ID而是一些“全局计数器”......