Это новый ответ на старый вопрос, но, возможно, он кому-нибудь пригодится.
Мне не понравилось длинное имя кварцевой нити [DefaultQuartzScheduler_Worker-1] в моих файлах журнала.
Вместо этого я хотел, чтобы log4net показывал идентификатор потока. Для этого вам нужно установить свойство, которое регистрирует идентификатор текущего потока.
Я нашел этот класс. источник
Это лямбда / функциональный способ записи вычисленного контекста: объяснение контекста log4net
public class Log4NetContextProperty : IFixingRequired
{
private readonly Func<string> _getValue;
public Log4NetContextProperty(Func<string> getValue)
{
_getValue = getValue;
}
public override string ToString()
{
return _getValue();
}
public object GetFixedObject()
{
return ToString();
}
}
И вы должны называть это так в месте запуска приложения.
log4net.GlobalContext.Properties["threadId"] = new Log4NetContextProperty(() => Thread.CurrentThread.ManagedThreadId.ToString());
Затем в вашей конфигурации log4net адаптируйте шаблон преобразования, чтобы включить новое свойство.
Моя выглядит так:
<conversionPattern value="%d{dd.MM.yyyy HH:mm:ss,ffff} %-5level [%property{threadId}] - %message%newline" />
Вот и все. Таким образом, идентификатор каждого потока будет определен во время выполнения и зарегистрирован в своем собственном свойстве.