2 Stimmen

Wie legt man den Namen des Quartz.net Worker-Threads fest?

Wie kann ich den Namen des Worker-Threads in Quartz.net festlegen?

[2009-12-15 08:56:25] [DefaultQuartzScheduler_Worker-1] INFO

Ich wollte in den Protokollen einige aussagekräftige Informationen sehen. Ich versuchte es mit JobDetail Konstruktor, aber es sieht so aus, als ob ich falsch liege.

var job = new JobDetail("n1", null, typeof (MyJob));

1voto

asyncwait Punkte 4417

Zumindest gibt es keine Möglichkeit, den Namen des Worker-Threads festzulegen. Ich habe jedoch die %property-Funktion von log4net verwendet, um aussagekräftige Thread-Namen in den Protokolldateien zu erzeugen

0voto

Marko Lahma Punkte 6245

Normalerweise sind Sie daran interessiert, was die Jobs ausgeben (sie sollten ihre eigenen Logger haben) und nicht an dem Thema.

Gibt es einen speziellen Fall, in dem Sie logische Namen für Threads benötigen? Die Threads werden gepoolt und es gibt keine Garantien dafür, welcher Thread welche Art von Auftrag zu verarbeiten bekommt. Deshalb ist der Thread-Name in der Regel nur zu Debug-Zwecken verwendbar, um die Dinge zu verfolgen, die im Lebenszyklus eines bestimmten Threads passieren.

0voto

ms007 Punkte 4401

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X