Im Moment sieht ein Standardeintrag ungefähr so aus:
Oct 12, 2008 9:45:18 AM myClassInfoHere
INFO: MyLogMessageHere
Wie bekomme ich das dazu?
Oct 12, 2008 9:45:18 AM myClassInfoHere - INFO: MyLogMessageHere
Klarstellung Ich verwende java.util.logging
logging.properties
, mit Anpassung basierend auf dem Vorschlag von @BrunoEberhard und einem verkürzten Loggernamen:java.util.logging.SimpleFormatter.format=%1$tF %1$tT %4$.1s %2$s %5$s%6$s%n
1)
-Djava.util.logging.SimpleFormatter.format
Java 7 unterstützt eine Eigenschaft mit der
java.util.Formatter
Format-String-Syntax.Siehe hier .
Mein Liebling ist:
was macht Ausgabe wie:
2) Zu IDEs bringen
Mit IDEs können Sie normalerweise Systemeigenschaften für ein Projekt festlegen. Fügen Sie beispielsweise in NetBeans anstelle von -D ... = ... irgendwo die Eigenschaft im Aktionsdialog in Form von
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-...
- ohne Anführungszeichen hinzu. Die IDE sollte es herausfinden.3) Setzen Sie das zu Maven - Surefire
Für Ihre Bequemlichkeit, hier ist, wie man es zu Surefire bringt:
4) Handgemacht
Ich habe eine Bibliothek mit wenigen
java.util.logging
verwandten Klassen . Unter ihnen ist esSingleLineFormatter
. Hier kann das Glas heruntergeladen werden .quelle
Ähnlich wie Tervor, aber ich möchte die Eigenschaft zur Laufzeit ändern.
Beachten Sie, dass dies festgelegt werden muss, bevor der erste SimpleFormatter erstellt wird - wie in den Kommentaren beschrieben.
quelle
Wie Obediah Stane sagte, ist es notwendig, eine eigene
format
Methode zu entwickeln. Aber ich würde ein paar Dinge ändern:Erstellen Sie eine Unterklasse, die direkt von
Formatter
und nicht von abgeleitet istSimpleFormatter
. DasSimpleFormatter
hat nichts mehr hinzuzufügen.Seien Sie vorsichtig beim Erstellen eines neuen
Date
Objekts! Sie sollten sicherstellen, dass Sie das Datum desLogRecord
. Beim Erstellen eines neuenDate
Konstruktors mit dem Standardkonstruktor werden Datum und Uhrzeit derFormatter
ProzesseLogRecord
und nicht das Erstellungsdatum angegebenLogRecord
.Die folgende Klasse kann als Formatierer verwendet , in einem
Handler
, die wiederum wird hinzugefügt , um dieLogger
. Beachten Sie, dass alle im und verfügbaren Klassen- und Methodeninformationen ignoriert werdenLogRecord
.quelle
Das benutze ich.
Sie werden so etwas wie ...
quelle
ofNullable(record.getThrown()).ifPresent(v -> v.printStackTrace());
kurz vor der Rückgabe der formatierten Nachricht.Wählen Sie pro Screenshot in Eclipse "Ausführen als" und dann "Konfigurationen ausführen ..." und fügen Sie die Antwort von Trevor Robinson mit doppelten Anführungszeichen anstelle von Anführungszeichen hinzu. Wenn Sie die doppelten Anführungszeichen verpassen, erhalten Sie die Fehlermeldung "Hauptklasse konnte nicht gefunden oder geladen werden".
quelle
Ich habe einen Weg gefunden, der funktioniert. Sie können SimpleFormatter in Unterklassen unterteilen und die Formatierungsmethode überschreiben
Ein bisschen überrascht über diese API hätte ich gedacht, dass mehr Funktionalität / Flexibilität sofort bereitgestellt worden wäre
quelle
formatMessage(record)
eher verwenden alsrecord.getMessage()
. Platzhalter werden nicht gewechselt.Diese Protokollierung ist anwendungsspezifisch und keine allgemeine Java-Funktion. Welche Anwendung (en) führen Sie aus?
Möglicherweise stammt dies aus einer bestimmten Protokollierungsbibliothek, die Sie in Ihrem eigenen Code verwenden. Wenn ja, geben Sie bitte die Details an, die Sie verwenden.
quelle
java.util.logging.Logger
Wenn Sie sich mit tomcat in einer Webanwendung anmelden, fügen Sie Folgendes hinzu:
Bei VM-Argumenten
quelle
Wenn Sie java.util.logging verwenden, gibt es eine Konfigurationsdatei, die dies zum Protokollieren von Inhalten ausführt (es sei denn, Sie verwenden eine programmgesteuerte Konfiguration). Sie haben also folgende Möglichkeiten:
1) Führen Sie einen Postprozessor aus, der die Zeilenumbrüche entfernt.
2) Ändern Sie die Protokollkonfiguration UND entfernen Sie die Zeilenumbrüche. Starten Sie Ihre Anwendung (Server) neu und Sie sollten gut sein.
quelle