🍪 Privacy & Transparency

We and our partners use cookies to Store and/or access information on a device. We and our partners use data for Personalised ads and content, ad and content measurement, audience insights and product development. An example of data being processed may be a unique identifier stored in a cookie. Some of our partners may process your data as a part of their legitimate business interest without asking for consent. To view the purposes they believe they have legitimate interest for, or to object to this data processing use the vendor list link below. The consent submitted will only be used for data processing originating from this website. If you would like to change your settings or withdraw consent at any time, the link to do so is in our privacy policy accessible from our home page..

Vendor List | Privacy Policy
Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • LCD’s
    • Kommunikation
    • Sicherheit
    • Weekend Project
  • Arduino
    • Tutorials
    • ProMini
      • Anschließen & Programmieren
    • Nano
      • Arduino Nano – Übersicht
    • UNO
      • Übersicht
    • MEGA 2560
      • Übersicht
    • Leonardo
      • Übersicht
    • NodeMCU
      • NodeMCU – “Einer für (fast) Alles!”
    • Lilypad
      • Arduino: Lilypad “Jetzt Geht’s Rund!”
    • WEMOS
      • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
      • WEMOS D1 Mini – Übersicht
      • Wemos D1 mini Shields
    • STM32x
      • STM32F103C8T6 – Übersicht
    • Maker UNO
      • Maker UNO – Überblick und Test
    • ATTiny85
      • Mini Arduino mit ATTiny85 Chip
      • ATtiny85 mit dem Arduino UNO beschreiben
  • Android
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

Apache log4J oder doch ein eigener Logger ?

Posted on 2. August 20142. Mai 2023 by Stefan Draeger

Die Frage ist nicht so einfach zu beantworten denn ein eigener simpler Logger ist relativ schnell geschrieben und verbraucht nur ein drittel der Ressourcen welche der Apache log4j mit der einfachen Einstellung verbraucht.

Wenn also nur fortlaufend in eine *.log Datei ein Wert geschrieben werden soll so kann man sich folgender Klasse behelfen.

Klasse Logger

package de.stefandraegersoftware.simplelogging;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public final class Logger {

	private static Logger instance;

	private static final String LINE_BREAK = "\n";
	private static final String FILENAME_SUFFIX = ".log";
	private static final String FILENAME_DATEFORMAT = "yyyyMMDDHHmmSS";
	private static final String LOGEVENT_DATEFORMAT = "yyyy-MM-dd HH:mm:SS,ss";
	private SimpleDateFormat dateFormatter;

	private File logFile;

	private StringBuffer logBuffer;

	/**
	 * Konstruktor der Klasse Logger
	 */
	private Logger() {
		StringBuffer filenameBuffer = new StringBuffer();
		filenameBuffer.append("./");
		filenameBuffer.append(getFormatedTimestamp(Calendar.getInstance().getTimeInMillis(), FILENAME_DATEFORMAT));
		filenameBuffer.append(FILENAME_SUFFIX);
		logFile = new File(filenameBuffer.toString());
		logBuffer = new StringBuffer();
	}

	/**
	 * Getter Methode um die Instanz der Logger Klasse zu erhalten.
	 * 
	 * @return - die aktuelle Instanz der Logger Klasse
	 */
	public static Logger getInstance() {
		if (instance == null) {
			instance = new Logger();
		}
		return instance;
	}

	/**
	 * Schreibt ein Event in die Loggerklasse.
	 * 
	 * @param lvl
	 *            - {@link Level} Objekt
	 * @param ex
	 *            - {@link Exception} welche geloggt werden soll
	 */
	public void log(Level lvl, Exception ex) {
		long timestamp = Calendar.getInstance().getTimeInMillis();
		storeLogEvent(lvl, ex, timestamp);
	}

	/**
	 * Erstellt ein LogEvent in dem StringBuffer.
	 * 
	 * @param lvl
	 *            - {@link Level} Objekt
	 * @param ex
	 *            - {@link Exception} welche geloggt werden soll
	 * @param timestamp
	 *            - der Zeitstempel wann der Fehler aufgetreten ist
	 */
	private void storeLogEvent(Level lvl, Exception ex, long timestamp) {
		logBuffer.append(String.format("[%s] %s: %s", getFormatedTimestamp(timestamp, LOGEVENT_DATEFORMAT), lvl, ex.getMessage()));
		logBuffer.append(LINE_BREAK);
		for (StackTraceElement element : ex.getStackTrace()) {
			logBuffer.append(element.toString());
			logBuffer.append(LINE_BREAK);
		}
		storeLogBuffer();
	}

	private String getFormatedTimestamp(long timestamp, String dateFormat) {
		dateFormatter = new SimpleDateFormat(dateFormat);
		return dateFormatter.format(timestamp);
	}

	/**
	 * Speichert den StringBuffer in eine Logdatei.
	 */
	private void storeLogBuffer() {
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(logFile));
			bw.write(logBuffer.toString());
			bw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

Enum Level

package de.stefandraegersoftware.simplelogging;

public enum Level {
	INFO, DEBUG, WARN, ERROR, FATAL;
}

Klar das ist jetzt ein ganz einfacher Logger aber der reicht in den meisten fällen aus.
Wenn man jetzt größere Anwendungen damit bestücken möchte sollte man sich überlegen ob nicht nach einer bestimmten Größe des StringBuffer Objektes eine neue Logdatei angefangen wird, denn sonst wird das StringBuffer Objekt zum Speicherfresser.

Download

simpleloggerHerunterladen

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb