Как преобразовать мой десятичный идентификатор потока в шестнадцатеричный формат и сделать его отображаться в шестнадцатеричном формате в шаблон преобразования log4net?
Я использую log4net для ведения журнала, и мой шаблон преобразования включает в себя threadId в моих выходных данных, но он содержит только самые высокие 2 цифры, и меня просят преобразовать его в шестнадцатеричное, но пока я нашел код C# для преобразования десятичных чисел в шестнадцатеричный, но как я могу преобразовать мой threadID в шестнадцатеричный формат и заставить его появляться в шестнадцатеричном формате Я очень новичок в этом, даже не знаю, где искать, кто-нибудь, пожалуйста, помогите?
вот код в XML-файле
<conversionPattern value="%date [%thread] %method %-5level %logger – %message%newline"/>
и [%thread] дает мне число, например 10, 7 или 8, но мне нужно, чтобы оно было в шестнадцатеричном формате, например 0x887df9, так что мне делать???
1 ответ
Вы можете написать конвертер так:
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>
Очевидно, что вы можете использовать этот конвертер в своем шаблоне так, как считаете нужным, и вам также нужно будет настроить конвертер так, чтобы он печатал шестнадцатеричное значение в точности так, как вы этого хотите.