如何将我的十进制线程ID转换为十六进制,并使其在log4net转换模式中以十六进制格式显示?

时间:2010-07-06 02:17:11

标签: c# log4net

我正在使用log4net进行日志记录,我的转换模式在我的输出中包含threadId,但它只有最高的2位数,我被要求将其转换为十六进制,但到目前为止,我发现代码C#将十进制数转换为十六进制但是如何我可以将我的threadID转换为十六进制并使其以十六进制格式显示。我是新手,甚至不确定在哪里看,有人帮忙吗?

这是xml文件中的代码

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

和[%thread]给我一个像10或7或8的数字,但我需要它是十六进制格式可能像0x887df9所以我该怎么办???

1 个答案:

答案 0 :(得分:5)

您可以编写如下转换器:

public sealed class HexPatternConverter : PatternLayoutConverter
{       
    override protected void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        long id;
        if (long.TryParse(loggingEvent.ThreadName, out id))
        {
            writer.Write(id.ToString("X"));
        }
        else
        {
            writer.Write(loggingEvent.ThreadName);
        }
    }
}

然后你像这样配置布局:

<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="[%hex_thread] %message%newline" />
  <converter>
    <name value="hex_thread" />
    <type value="YourNamespace.HexPatternConverter" />
  </converter>
</layout>

显然,您可以根据需要在模式中使用此转换器,并且还需要调整转换器,以便根据需要打印十六进制值。