Dieses Protokollierungsmodul einfach in den Griff bekommen.java.util.logging: Wohin geht die Handler-Ausgabe, wenn sie von Windows aus ausgeführt wird?
Wenn ich es in Eclipse ausführen, geht die Konsolenausgabe dahin, wo ich erwarte: Konsolenhandler zu Konsole, Dateihandler zu Datei.
Wenn ich von der Eingabeaufforderung laufen habe ich keine Ahnung, wo die Konsolenausgabe oder die Dateiausgabe geht. Diese
ist, wie ich es konfigurieren:
Handler consoleHandler = null;
Handler fileHandler = null;
try {
logger.setUseParentHandlers(false);
// Creating consoleHandler and fileHandler
consoleHandler = new DualConsoleHandler();
// 1000 bytes max, 5 files max, append mode = true
fileHandler = new FileHandler("./output/logging/log%g.xml", 10000, 5, true);
// Assigning handlers to logger object
logger.addHandler(consoleHandler);
logger.addHandler(fileHandler);
// Setting levels to handlers and logger
consoleHandler.setLevel(Level.ALL);
fileHandler.setLevel(Level.ALL);
logger.setLevel(Level.ALL);
} catch (IOException exception) {
logger.log(Level.SEVERE, "Error occur in FileHandler.", exception);
}
Die DualConsoleHandler
sieht wie folgt aus (in einem anderen SO Frage gefunden), die Idee INFO zu drucken ist oder niedriger stdout, aber WARNUNG oder höher stderr:
public class DualConsoleHandler extends StreamHandler {
private final ConsoleHandler stderrHandler = new ConsoleHandler();
public DualConsoleHandler() {
super(System.out, new SimpleFormatter());
}
@Override
public void publish(LogRecord record) {
if (record.getLevel().intValue() <= Level.INFO.intValue()) {
super.publish(record);
super.flush();
} else {
stderrHandler.publish(record);
stderrHandler.flush();
}
}
}
Ihr DualConsoleHandler-Code wird den Standard schließen. Überschreiben Sie 'close' und die Implementierung sollte' this.flush(); stderrHandler.close(); ' – jmehrens