Input/Output Jave.utill.logging ohne Default-Locale also in Englisch

Senftube

Aktives Mitglied
Hallo !
Wie kann ich die Ausgabe der Severity-Namen in Englisch (Severe,Warning,..Finest) erhalten
anstelle der aktuellen Locale-Einstellung DE: SCHWERWIEGEND, usw. Schließlich verwende ich nicht die logrb() Funktionen um mithilfe ResourecBundles sprach-spezifische Ausgane zu machen. Ich vermute ja mal, dass Programmierer die Texte in englischer Sprache verfassen, damit es auch Programmierer in anderen Ländern -im Falle eines SW-Supports- verstehen können. Als Workaround setze ich die Locale vor dem
Laden der logging.properties Datei auf English, aber aber keine Ahnung welche side-effects ich
mir dafür einkaufe.
Gibt es bessere Lösungen ? Evtl. eine Locale-Property für die logging.properties ?
(Aber bitte keine Vorschläge einen 3rd-Party Logger zu verwenden...)

public static void main(String[] args)
{
final String fn = "main";
//-------load the appl. logging.properties
String logcfg="etc\\logging_jultest.properties";
Locale.setDefault(Locale.ENGLISH);

System.setProperty("java.util.logging.config.file",logcfg);
try
{ LogManager.getLogManager().readConfiguration(
new FileInputStream(System.getProperty("java.util.logging.config.file")));
} catch (Exception e)
{
logger.logp(Level.SEVERE,cn,fn,e,()->"LogManager.readConfiguration() failed: "+logcfg);
}
logger.severe("severe test message");
// [13:41:35.785];[SEVERE ];JulTest main;severe test message
 
Hallo Flown,
der Link war sehr gut. Ich mach mir meine eigene Level Klasse und definiere dann
ein paar Konstanten..das wars. Vielleicht gibts auch in der JRE ein editierbares ResourceBundle mit
den Namen..aber das muesste ich ja bei jeder neuen JRE nachziehen.

public class Level extends java.util.logging.Level {
private static final long serialVersionUID = -1283674772992561191L;

public static final Level OFF = new Level("OFF", Integer.MAX_VALUE);
public static final Level SEVERE = new Level("SEVERE", 1000);
public static final Level WARNING = new Level("WARNING", 900);
public static final Level INFO = new Level("INFO", 800);
public static final Level CONFIG = new Level("CONFIG", 700);
public static final Level FINE = new Level("FINE", 500);
public static final Level FINER = new Level("FINER", 400);
public static final Level FINEST = new Level("FINEST", 300);
public static final Level ALL = new Level("ALL", Integer.MIN_VALUE);

protected Level(String name, int value) {
super(name, value);
}
}
 
Dieses Posting ist nur zur Info, falls da mal jemand rein stolpert und sich zu früh freut...

Das folgende ist ja auch auf stackoverflow nie hochgepoppt, dass das nix bringt...
Ja, die Idee war erstmal vielversprechend, einfach eine eigene Level Klasse von der
Orschinal Level Klasse abzuleiten (Danke nochmal an Flown)
Der, die Haken sind:
1) Man darf nicht mehr import java.util.logging.Level; verwenden
Blöd zu finden wenn man irgendwo in Klassen java.util.logging/* verwendet hat
Sondern die eigene Level Klasse im package wird ja automatisch gefunden
2) Alle verwenden Klassen oder jar-Files dürfen dann auch nicht mehr java.util.logging.Level
importieren sondern die abgeleitete Level Klasse
3) 3rd Party Jars die JUL verwenden, werden deine Klasse Level ja nie zu Gesicht bekommen
und rumpeln weiter mit dem Sauerkraut-Locale Monsters SCHWERWIEGEND und KONFIGURATION
4) 1) bis 3) war ja nur nice-to-know aber jetzt das absolute #NOGO Die eigene Levelklasse wirkt sich nur auf funktion aus, die expliziet das Level als argument entgegen nehmen, also tabu für logger.severe() und Konsorten.
Denke mal das eher die user-convienient funktionen severe(, warning(), info() usw. verwendet werden.
 

Zurück
Oben