Logger schreiben

Status
Nicht offen für weitere Antworten.

dexcs

Mitglied
Hallo Board.
Ich hab ein kleines Problem. Ich weiß net wie ichs programmieren soll.

Ich hab mir zwei Klassen geschrieben um Daten in ner Datei zu logggen:
Logger.java:
Code:
package logger;

public class Logger {

	public String logMode = null;

	public int debugMode;

	public Filelog log = new Filelog();

	public void setLogMode(String lLogMode) {
		logMode = lLogMode;
	}

	public void setDebugMode(int ldebugMode) {
		debugMode = ldebugMode;
	}

	public Filelog startLogger(String lLogFolder, String lLogName) {
		if (logMode == "file") {
			log.setLogFolder(lLogFolder);
			log.setLogName(lLogName);
			log.write("Start of Log");
		}
		return null;
	}

	public void write(int lDebugMode, String lLine) {
		if (logMode == "file" && lDebugMode <= debugMode) {
			log.write(lLine);
		}
	}

	public void writeLogOut() {
		if (logMode == "file") {
			log.writeLogFile();
		}
		// evtl. noch datenbanklogger
	}
}
Filelog.java:
Code:
package logger;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Filelog {
	private static String logFolder;
	private static String logName;
	public static String log = "";
	
	public void setLogFolder(String lLogFolder) {
		logFolder = lLogFolder;
	}
	public void setLogName(String lLogName) {
		logName = lLogName;
	}
	public void write(String lLog) {
		log += lLog + "\r\n";
	}
	public void writeLogFile() {
		PrintWriter writer = null;
		try {
			writer = new PrintWriter(new FileWriter(logFolder + logName,
					true));
		} catch (IOException e) {
			e.printStackTrace();
		}
		writer.println(log);
		writer.flush();
		writer.close();
	}
}

Wenn ich jetzt in meiner Mainfunktion ne Instant erzeuge,
Code:
		Logger log = new Logger();
		log.setLogMode("file");
		log.startLogger("C:\\log\\", "log.txt");
dann kann ich mittels "log.write();" drauf sachen in die datei schreiben.
So schön, so gut.

Jetzt ruf ich in meiner mainfunktion aber auch noch andere klassen auf, die über die selbe instanz in die Datei schreiben sollen.

1. Wie übergeb ich diese Instanz?
2. Was würdet ihr anders machen?
3. Ist das so wie ich es versuche sinnvoll?

Mfg Max
 
Ein Logger ist etwas, wo sich meines erachtens static wirklich anbietet.

Also eine static methode names:
Code:
public static void log(SomeThingToLog) {
 // Speichere 
}

Alternativ kannst du dir java.util.logging ansehen (Das gefällt mir persönlich nicht) oder log4j (Das kenne ich nicht)

Damit erparst du dir das Schreiben eines eigenen Logging Frameworks.
 
blub
Code:
if (logMode == "file") {
schau mal in die FAQ Stringvergl

ansonsten schau dir mal entweder

1. Singletons an
2. java.util.Logger
3. System.out.println() mit geänderten System.setOut
 
Ok, danke ich habe l4j genommen.
Code:
	public static void main(String[] args) {
		SimpleLayout layout = new SimpleLayout();
		FileAppender fileAppender;
		try {
			ConsoleAppender consoleAppender = new ConsoleAppender(layout);
			logger.addAppender(consoleAppender);
			fileAppender = new FileAppender(layout, "c:\\log\\log.txt", false);
			logger.addAppender(fileAppender);
			logger.setLevel(Level.DEBUG);
		} catch (Exception ex) {
			System.out.println(ex);
		}
...
	    logger.debug( "Meine Debug-Meldung" );
	    logger.info(  "Meine Info-Meldung"  );
	    logger.warn(  "Meine Warn-Meldung"  );
	    logger.error( "Meine Error-Meldung" );
	    logger.fatal( "Meine Fatal-Meldung" );
	}
}

Das funktioniert auch.
Aber ich weiß immernochnicht wie ich in den anderen Klassen das logger.debug aufrufe.
Wie übergebe ich das?

Max
 
Wie bereits weiter oben erwähnt solltest du da den Singleton nutzen. Also:
- deine Klasse auf private static setzen
- private Instanz der Klasse mit null anlegen
- Methode bsp. getTheInstance() schreiben
Code:
private Klasse m_Instance = null;
...
public Klasse getTheInstance() {
   if(m_Instance == null) {
      m_Instance = new Klasse();
   }
   return m_Instance;
}
Und der Zugriff:
Code:
Klasse.getTheInstance().methodeXY();
 
dexcs hat gesagt.:
...
Aber ich weiß immernochnicht wie ich in den anderen Klassen das logger.debug aufrufe.
Wie übergebe ich das?
...
Siehe Logger.getLogger(...) oder Logger.getAnonymousLogger(...)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben