Frage zum Loggen von Fehlern

MarioW1986

Bekanntes Mitglied
Guten Morgen zusammen, ich habe folgenden Code aus dem Internet genommen und etwas modifiziert.
Die Funktionalität ist gegeben, dass der Fehler in einer HTML Datei geschrieben wird. Leider wird die Log-Datei bei jedem Fehler neu beschrieben und somit sind die alten Logs weg.

Meine Frage ist folgende: Wie erreiche ich es, dass die Datei erhalten bleibt und nur durch neue Einträge ergänz wird. Links sind willkommen, Vorschläge und Codebeispiele oder einfach Erläuterungen sind alles ok.

Hier mein Code:

Java:
public class DatenLogging {
	
	/* 		Sollte die Datenbank einmal nicht erreichbar sein,
	 * 		können auftretende Fehler in der Datenbank nicht
	 * 		geloggt werden. Dazu wird alternativ eine Datei erzeugt,
	 * 		in der Datenbankausfälle geloggt werden.
	 */
	
	
	public static Logger logger = Logger.getLogger(DatenLogging.class.getName());
	public static int lineNumber=0;
	public static String methodName = "";
	public static String className = "";
	public static String message = "";
	
	
	public DatenLogging() {
		FileHandler fh = null;
		try {
			fh = new FileHandler("db_log.html");
		} catch (SecurityException | IOException e) {
			e.printStackTrace();
		}
	    //fh.setFormatter(new LogFormatter());
	    logger.addHandler(fh);
	}
	
	
	public static void LogDetails(Exception e) {
		
		e.printStackTrace();
		System.out.println("-----------------");
		System.out.println("-----------------");
		lineNumber =  e.getStackTrace()[0].getLineNumber();
		methodName = e.getStackTrace()[0].getMethodName();
	    className = e.getStackTrace()[0].getClassName();
	    message = e.getMessage();
	    
	    //String hinweis = e.getCause().toString();
	    logger.logrb(Level.WARNING, className, methodName, ""+lineNumber, message, e.getCause());
	    
	    System.out.println("Zeile: " + lineNumber);
	    System.out.println("Methode: " + methodName);
	    System.out.println("Klasse: " + className);
	    System.out.println("Meldung " + message);
	    //System.out.println("Hinweis: " + hinweis);
	}

}


und...

Java:
class HTMLFormatter extends java.util.logging.Formatter {
  public String format(LogRecord record) {
    return ("<tr><td>" + (new Date(record.getMillis())).toString() + "</td><td>"
        + record.getMessage() + "</td></tr>\n");
  }

  public String getHead(Handler h) {
    return ("<html>\n  <body>\n" + "<Table border>\n<tr><td>Time</td><td>Log Message</td></tr>\n");
  }

  public String getTail(Handler h) {
    return ("</table>\n</body>\n</html>");
	  
  }
}

public class LoggingHTMLFormatter {
  public static void main(String args[]) throws Exception {
      LogManager lm = LogManager.getLogManager();
      Logger parentLogger, childLogger;
      FileHandler xml_handler = new FileHandler("log_output.xml");
      FileHandler html_handler = new FileHandler("log_output.html");
      parentLogger = Logger.getLogger("ParentLogger");
      childLogger = Logger.getLogger("ParentLogger.ChildLogger");

      lm.addLogger(parentLogger);

      lm.addLogger(childLogger);

      parentLogger.setLevel(Level.WARNING);
      childLogger.setLevel(Level.ALL);
      xml_handler.setFormatter(new XMLFormatter());
      html_handler.setFormatter(new HTMLFormatter());

      parentLogger.addHandler(xml_handler);
      childLogger.addHandler(html_handler);

      childLogger.log(Level.FINE, "This is a fine log message");
      childLogger.log(Level.SEVERE, "This is a severe log message");
      xml_handler.close();
      html_handler.close();
  }
}

Ich bedanke mich schon einmal im voraus 🙂
 
Hallo, danke dass mit dem append war auf jedenfall sehr hilfreich. Dann hab ich noch ne Frage. Ist es denn möglich, dass nicht bei jedem Start ein neuer Kopf eingefügt wird, sondern, dass die Meldungen einfach unten angehängt werden?
 
Da kann ich jetzt nicht helfen, da ich keine Zeit habe mich mit Formatter zu beschäftigen. Ich denke schon, dass es machbar wäre, weiss aber nicht im Detail ob die Methoden getHead und getTail zu unterbinden gehen. Da musst du vielleicht ein wenig experimentieren. Das Problem bei HTML ist ja dann, dass du die zusätlichen Informationen mitten im Body-Tag unterbringen musst, vermute ich.
 

Zurück
Oben