Dies ist eine neue Antwort auf eine alte Frage, aber vielleicht ist sie für jemanden hilfreich.
Ich mochte den langen Quarz-Thread-Namen [DefaultQuartzScheduler_Worker-1] in meinen Protokolldateien nicht.
Stattdessen wollte ich, dass log4net die Thread-ID anzeigt. Dazu müssen Sie eine Eigenschaft festlegen, die die ID des aktuellen Threads protokolliert.
Ich habe diesen Kurs gefunden. Quelle
Dies ist eine Lambda-/Funk-Methode zur Protokollierung des berechneten Kontexts: log4net-Kontext erklärt
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();
}
}
Und so müssen Sie es auch in der Startdatei Ihrer Anwendung nennen.
log4net.GlobalContext.Properties["threadId"] = new Log4NetContextProperty(() => Thread.CurrentThread.ManagedThreadId.ToString());
Passen Sie dann in Ihrer log4net-Konfiguration das Konvertierungsmuster an, um die neue Eigenschaft einzuschließen. Meine sieht so aus:
<conversionPattern value="%d{dd.MM.yyyy HH:mm:ss,ffff} %-5level [%property{threadId}] - %message%newline" />
Das war's. Auf diese Weise wird die ID jedes Threads zur Laufzeit ermittelt und in seiner eigenen Eigenschaft protokolliert.