Log4J


#1

Hey Leute, ich brauche eure Hilfe in Bezug auf Log4J.
war läuft das Logging bei mir. Ich glaube aber das es konzeptionel schlecht gemacht ist von mir:


import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;

import com.rational.test.ft.value.Pattern;

public class Log {

	// ****************************************
	// Logging methods
	// ****************************************
	// ****************************************
	// logger.debug(String); 
	// logger.info("My info-Message");
	// logger.warn("My warn-Message"); 
	// logger.error("My error-Message");
	// logger.fatal("My fatal-Message");
	// ****************************************
	// File Appender Options
	// logger.setLevel(Level.xxxx);
	// ALL | DEBUG | INFO | WARN | ERROR | FATAL | OFF: 
	
	 

		
	private static Logger logger = Logger.getRootLogger();
	
	public static Logger getLogger() {
		try {
			PatternLayout layout = new PatternLayout(
					"%d{dd.MM.yyyy HH:mm:ss,SSS} %-5p [%t] %c: %m%nFilename: %F  Linenumber: %L  Methodname: %M%n%n");
			FileAppender fileAppender = new FileAppender(layout, "c:\\SysLog.log",
					false);
			logger.addAppender(fileAppender);
			logger.setLevel(Level.DEBUG);
		} catch (Exception ex) {
			System.out.println(ex);
		}
		return logger;
	}
}

ich instantiere den logger in den klassen dann so

private static Logger log = Log.getLogger();

ich hatte aber gesehen, dass man im konsturktor auch eine klasse mitgeben kann (inder man sich befindet). Was hat das für vorteile… was würdet ihr im allgemeinen anders machen.

ich möchte jetzt auch eine properties datei nutzen


#2

Da die Sache static ist, hat das den Vorteil, dass man keine Instanz anzulegen braucht. Du kannst überall, an beliebiger Stelle den Logger anwerfen und Logausgaben machen.
Wenn du auch noch die Klasse übergibst, in der du dich befindest, kannst du bspw. zu Debug-Zwecken Exceptions schneller zuordnen und das Problem schneller eingrenzen.


#3

Da die Sache static ist, hat das den Vorteil, dass man keine Instanz anzulegen braucht.

Naja, vom “Aufwand” her ist das egal. Ob ich in einer Codezeile mir den static Logger hole, oder eine neue Instanz erzeuge ist wohl schnuppe.

Ich verwende bei mir in jeder Klasse eine eigene Instanz. Grund:

Finde den Vorteil, dass ich bei jeder Logausgabe weiß in welcher Klasse und Methode ich mich gerade bewege größer, als den Nachteil, dass ich viele Logger-Instanzen hab und ich mir damit (etwas) den Speicher fülle.

  • Alex