Log4Net - Zeit mit Protokollierung datetime
Mir entwickelte sich eine asp.net website, wo ich die log-Fehler, die Informationen mit log4net mit format:
"%-5p %d - %m%n"
It-Protokolle Datum /Uhrzeit von der aktuellen Maschine datetime.
Zum Beispiel:
FATAL 2011-04-10 01:08:11,759 - message
Aber ich will umwandeln, datetime in eine andere region oder fügen Sie zusätzliche Zeit mit ihm. Zum Beispiel möchte ich hinzufügen, dass 3 Stunden mit dem vorherigen Beispiel und wollen als output:
FATAL 2011-04-10 **04**:08:11,759 - message
Jede Idee, wie dies zu erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte dies nicht die Antwort auf Ihre Frage, denn ich bin mir nicht sicher, was genau Sie versuchen zu erreichen. Vielleicht, wenn Sie könnten, bieten mehr details über genau, warum Sie dies tun wollen, erhalten Sie möglicherweise eine bessere Antwort.
Wenn Sie versuchen, zu korrelieren mehrere log-Dateien (oder andere Quellen) generiert wurden, in verschiedenen Regionen, die es helfen könnte...
Könnten Sie versuchen, log4net ist
utctime
PatternLayout wie beschrieben hier.Diese erhalten Ihre log-Zeiten in universal time, die möglicherweise einfacher für Sie zu korrelieren. Wenn Sie haben die Kontrolle über die Quellen der timestampes (wie Ihr asp.net website), dann mit der Normalisierung Sie zur universal time, Sie sollte einfacher zu vergleichen.
Wenn Sie wirklich wollen, um die Zeit zu ändern, um eine andere region oder hinzufügen/subtrahieren einer beliebigen Zeitspanne von-Zeitstempel, wie es angemeldet ist, müssen Sie möglicherweise schreiben Sie Ihre eigenen benutzerdefinierten PatternLayout oder PatternLayoutConverter. Das könnte ein wenig kompliziert, da ich denke, dass weder die log4net DatePatternConverter noch die UtcDatePatternConverter ist verfügbar für die Anpassung (d.h. Sie werden erklärt
internal
so können Sie nicht Unterklasse Ihnen und fügen Sie Ihr Verhalten).Könnten Sie schreiben, Ihre eigenen von Grund auf, mit log4net Umsetzung von log4net code-repository, aber das scheint wie eine Menge ärger auf mich zu.
Noch eine Anmerkung, vielleicht wäre es nützlich zu Protokoll Zeit wieder in einer separaten Spalte mit einem dieser Custom Date format specifiers: z, zz, zzz, K.
UPDATE:
Sehen diese Antwort für eine andere Idee, die helfen könnte. Die Frage fragt nach einer Möglichkeit zum erfassen von Benutzernamen mit log4net. Letztlich ist die beste Lösung für ihn war schreiben eine sehr kleine Klasse, die zurückkehren wird, die Informationen, die er braucht (username). Eine Instanz der Klasse gespeichert werden kann, in die MDC (oder GlobalDiagnosticContext) und auf die in der Konfiguration. Wenn log4net bekommt den Wert aus der MDC (d.h. das Objekt), ruft Sie die ToString-und protokolliert das Ergebnis. Dieser Ansatz ist viel einfacher, wenn auch etwas weniger flexibel, als das schreiben eine ganz neue PatternLayoutConverter.
Richtung der Unterseite der Antwort ist einige Beispiel-code wie folgt:
Würden Sie speichern das Objekt in der MDC - /GlobalDiagnosticContext.Eigenschaften wie diese:
Wahrscheinlich könnte man etwas schreiben, ähnlich wie die Rückkehr einer anderen Zeit. Sie könnten diese Zeit nutzen, statt die log4net-sofern Zeit, oder Sie stellen diese "custom" - Zeit eine zusätzliche Spalte ein. Ihre "eigene Zeit" - Objekt kann wie folgt Aussehen:
Dann könnte man darauf verweisen, wie diese:
Ich bin mir nicht sicher, ob Sie anwenden können, - Formate, um Elemente aus der MDC - /GlobalDiagnosticContext.Eigenschaften (ich glaube, Sie kann) oder nicht, aber man könnte es versuchen und sehen.
Sie können immer mit einer fest codierten format oder fügen Sie eine format-Eigenschaft auf das Objekt wie folgt:
Könnten Sie werfen Sie einen Blick auf dieser Artikel zum konvertieren von UTC-Zeit in einer beliebigen Zeitzone.
Wenn Sie müssen einfach die "shift" - Datum, um Ihre Zeitzone, können Sie schreiben Ihre eigenen ForwardingAppender, das wird sich ändern, DateTime des Ereignisses:
Und in .config