log4j design

Status
Nicht offen für weitere Antworten.

Mark110

Bekanntes Mitglied
Hallo,

ich brauche unbedingt hilfe im grundlegenden aufbau von log4j.

ich weiss ich sollte eine xml datei benutzen um die einstellungen layout etc zu setzen. Das kann ich mir aus einem beispiel rauskopieren und anpassen. Ich würde das ins rootverzeichnis meines Projektes legen.
Was muss ich jetzt noch machen ...?
es gibt ja einmal den root logger ... den muss ich irgendwo einmal instanzieren?
Wenn ja dann über ein singleton? in einer eigenen klasse? sollte diese klasse statisch sein?

der nächste schritt ist doch dann in meinen augen, dass ich mit dieser oben erwähnten klasse einen rootlogger zurück bekomme und mit dem einen Logger erzeuge , wo ich als konstruktor parameter die klasse übergebe?
 

Mark110

Bekanntes Mitglied
ach und jetzt ist mir noch eine frage gekommen.

Ich habe eine Klasse A, die unterklassen B,C,D hat, sprich B C D erbt von A. In A habe ich einen Logger definiert. Dieser steht ja dann in allen Klassen darunter zur verfügung. Ist das so richtig? oder muss ich den in jeder unterklasse neu instanzieren?
 

Mark110

Bekanntes Mitglied
das tutorial kenne ich bereits.
Kannst Du nicht auf meine Fragen bezug nehmen? Das sind konkrete Fragen nach dem lesen der tutorials. ;)
 

Saxony

Top Contributor
TomBola hat gesagt.:
das tutorial kenne ich bereits.
Kannst Du nicht auf meine Fragen bezug nehmen? Das sind konkrete Fragen nach dem lesen der tutorials. ;)

Na dann schreib doch bitte in deinem ersten Beitrag auch was du schon alles gelesen hast!

Den RootLogger musst du nicht zwingend instanzieren! Er wird über dein prop File konfiguriert und nachfolgende Logger erben von diesem. So wie es auch in dem Tut steht!

Beispiel:

Code:
public class Test {

    public static void main(String[] args) {

        Logger logger = Logger.getLogger(Test.class);
		
        PropertyConfigurator.configure("conf/log4j.prop");

        logger.info("start");
        new Application("MyApplication");
        logger.info("ende");
    }
}

Logger Prop-File:

Code:
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Das Beispiel funktioniert bereits, es ist nichts anderes als was schon im Tut beschrieben wird. Den Logger den du anlegst hat den Namen Build.class und er erbt alle Einstellungen des in Prop-File konfigurierten RootLoggers.
Hier siehst du ebenfalls wie man eine Prop-File angeben kann ( PropertyConfigurator.configure("conf/log4j.prop"); ).

Es empfiehlt sich eh für jede Klasse, wo geloggt werden soll, einen Logger über Logger.getLogger(MyClass.class);
anzulegen.

Wenn du eine Vererbungshierarchie hast dann erben natürlich alle Kinder den Logger.

Code:
class A {
	
	protected Logger logger = Logger.getLogger(A.class);
	
	public A() {
		
		this.logger.info("Constructor A");
	}
}

class B extends A {
	
	public B() {
		
		this.logger.info("Constructor B");
	}
}

public static void main(String[] args) {

    PropertyConfigurator.configure("conf/log4j.prop");

    new A();
    new B();
}

Ausgabe:

Code:
0    [main] INFO  test.A  - Constructor A
0    [main] INFO  test.A  - Constructor A
0    [main] INFO  test.A  - Constructor B

bye Saxony
 

Mark110

Bekanntes Mitglied
vielen dank für dein ausfürliches beispiel!
Ich denke ich habe es jetzt verstanden und mache es genauso wie du beschrieben hast. Zwingend ist aber, dass die property datei in der main methode der aplication aufgerufen wird.
danach kann ich in allen anderen klassen den logger benutzen?!
in deinem beispiel sind die logger nicht private static final. ich nehme an das das der übersichtlichkeit halber gemacht wurde?
in der richtigen implementierung sollten die dann aber schon private static final sein?!
 
M

maki

Gast
Am besten die Logger als

private static final Logger logger = Logger.getLogger(A.class);

anlegen, dann gibt es später keine Verwunderung beim lesen der Logs.
 

Saxony

Top Contributor
TomBola hat gesagt.:
Zwingend ist aber, dass die property datei in der main methode der aplication aufgerufen wird.
danach kann ich in allen anderen klassen den logger benutzen?!

Naja man kann es so machen mit dem PropertyConfigurator, aber besser ist es, es über Standard Initialisierung zu machen. (siehe Tutorial Seite 16)

TomBola hat gesagt.:
in deinem beispiel sind die logger nicht private static final. ich nehme an das das der übersichtlichkeit halber gemacht wurde?
in der richtigen implementierung sollten die dann aber schon private static final sein?!

Ja sie sollten private static final sein! Dann kann man sie aber auch nicht mehr vererben wie es von dir gewünscht war. Dann hilft nur noch:

Code:
public class A {

    private static final Logger logger = Logger.getLogger(A.class);

    public A() {

        logger.info("Constructor A");
    }
	
    public static Logger getLogger() {
		
        return logger;
    }
}

public class B extends A {
	
    public B() {
		
        A.getLogger().info("Constructor B");
    }
}

bye Saxony
 

Mark110

Bekanntes Mitglied
Saxony hat gesagt.:
TomBola hat gesagt.:
Zwingend ist aber, dass die property datei in der main methode der aplication aufgerufen wird.
danach kann ich in allen anderen klassen den logger benutzen?!

Naja man kann es so machen mit dem PropertyConfigurator, aber besser ist es, es über Standard Initialisierung zu machen. (siehe Tutorial Seite 16)

__________________________________________
hmmm was genau bedeutet standard initialisierung?
 

Saxony

Top Contributor
Hiho

Naja mach es erst einmal so mit PropertyConfigurator.configure in der main! Was ich eigentlich meinte, ist es auf solche statischen Dinge (Pfadangabe zum log4j prop-file) im Source zu verzichten. Ich dachte Kapitel 6 behandelt solche anderen Initvorgänge - tut es aber leider nicht! ;)

bye Saxony
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S log4j "Richtiges" Design Java Basics - Anfänger-Themen 4
K log4j nach log4j2 überführen Java Basics - Anfänger-Themen 0
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
MiMa log4j als separate Dateien in Schleife? Java Basics - Anfänger-Themen 6
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
B Log4J Pfad des Logfiles definieren Java Basics - Anfänger-Themen 6
Tom299 Log4j in jeder Klasse definieren? Java Basics - Anfänger-Themen 12
O Wie Log4J - Ausgaben/Events auffangen?! Java Basics - Anfänger-Themen 3
S log4j in externer Library Java Basics - Anfänger-Themen 4
M xml log4j überschreiben für/in Java Klassen Java Basics - Anfänger-Themen 4
N wie *.class-Dateien mit log4j loggen? Java Basics - Anfänger-Themen 9
F Log4j - log4j:WARN No appenders could be found for logger Java Basics - Anfänger-Themen 1
0 Log4J Probleme beim einlesen der Log datei Java Basics - Anfänger-Themen 2
0 Log4J Instanz erzeugen Java Basics - Anfänger-Themen 2
M Input/Output log4j mit properties datei Java Basics - Anfänger-Themen 6
T LOG4J Konfiguration Java Basics - Anfänger-Themen 5
W log4j "installieren" Java Basics - Anfänger-Themen 10
F ThreadId in Log4j Java Basics - Anfänger-Themen 4
M log4j Java Basics - Anfänger-Themen 11
H Log4J und Angabe eines Ordners Java Basics - Anfänger-Themen 5
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
A log4j - Warum wird Methode getHeader 2x ausgeführt? Java Basics - Anfänger-Themen 2
S log4j pfad per umgebungsvariable setzen? Java Basics - Anfänger-Themen 2
G Probleme mit log4j Java Basics - Anfänger-Themen 2
G log4j Java Basics - Anfänger-Themen 4
S LineNumberReader - bessere Lösung möglich? - Log4J Java Basics - Anfänger-Themen 9
G Kompletten Stacktrace mit Log4j ausgeben Java Basics - Anfänger-Themen 3
M logging mit log4j Java Basics - Anfänger-Themen 4
M log4j frage zu whitespaces Java Basics - Anfänger-Themen 2
G log4j Java Basics - Anfänger-Themen 3
H Log4J Pfad setzen Java Basics - Anfänger-Themen 2
M log4j Unterverzeichnis mit Datum , Timestamp in LogDateiname Java Basics - Anfänger-Themen 2
G Log4j? Java Basics - Anfänger-Themen 15
G Log4j notwendig oder nicht? Java Basics - Anfänger-Themen 16
J Log4j + Junit Java Basics - Anfänger-Themen 4
M log4j XML Konfigurationsdatei Java Basics - Anfänger-Themen 2
M "System.out" "System.err" bzw. log4j Java Basics - Anfänger-Themen 9
K log4j Java Basics - Anfänger-Themen 2
R log4j - Datum an Logdatei anhängen möglich? Java Basics - Anfänger-Themen 7
B Log4J Anfänger sucht hilfe! Java Basics - Anfänger-Themen 4
N Log4J Problem Java Basics - Anfänger-Themen 4
D was ist der vorteil vom Builder-design pattern? Java Basics - Anfänger-Themen 11
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
A Frage zum UML Design Java Basics - Anfänger-Themen 1
F Design pattern Java Basics - Anfänger-Themen 29
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
N design time vs build time vs compile time Java Basics - Anfänger-Themen 2
H Eclipse , Design-Modus, unvollständige Darstellung Java Basics - Anfänger-Themen 0
M LookandFeel Design Java Basics - Anfänger-Themen 4
D Design Pattern Command Java Basics - Anfänger-Themen 3
M Erste Schritte Eclipse + design view Java Basics - Anfänger-Themen 3
J Design Patterns Java Basics - Anfänger-Themen 8
Tarrew Proxy Design-Pattern Java Basics - Anfänger-Themen 1
D Besseres Design Frage Java Basics - Anfänger-Themen 1
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
J MVC- Design Frage Java Basics - Anfänger-Themen 3
C Java Klassen Design? Java Basics - Anfänger-Themen 5
OnDemand Software-Design Java Basics - Anfänger-Themen 1
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
B Warum haben Java Programme ein anderes Design? Java Basics - Anfänger-Themen 5
S Singleton (Design Patterns) Java Basics - Anfänger-Themen 16
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
Rudolf OOP Übungen zu Design Pattern in Java Java Basics - Anfänger-Themen 6
K Interface als Instanzvariable = gutes Design Java Basics - Anfänger-Themen 6
S Eclipse Design-Reiter fehlt Java Basics - Anfänger-Themen 6
D Design-Tipps für neues Programm (Excel-Charts-...) Java Basics - Anfänger-Themen 3
M Button mit eigenem Design Java Basics - Anfänger-Themen 6
R Welches Design pattern Java Basics - Anfänger-Themen 10
S Gutes Design mit statischen oder Member-Methoden Java Basics - Anfänger-Themen 53
X Externer GUI Code verwenden / (Design Ansicht) Java Basics - Anfänger-Themen 3
B OOP Frage zu Klassen Design Java Basics - Anfänger-Themen 5
Hamstinator Design und Listener in verschiedenen Klassen Java Basics - Anfänger-Themen 6
J Methoden design Java Basics - Anfänger-Themen 3
hdi Design-Problem Java Basics - Anfänger-Themen 2
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
Q Listen - DefaultListModel trotz Design ueber GUI? Java Basics - Anfänger-Themen 10
B Java-Anwendung im Windows Design Java Basics - Anfänger-Themen 8
hdi Design-Frage: bin unzufrieden Java Basics - Anfänger-Themen 11
M code design Java Basics - Anfänger-Themen 14
D Design Fragen Java Basics - Anfänger-Themen 5
M Design: Abfrage auf korrekte Eingabe Java Basics - Anfänger-Themen 4
W Design Problem Java Basics - Anfänger-Themen 7
T Wie wichtig ist Design Patterns in einer Firma? Java Basics - Anfänger-Themen 8
M Java Design Frage Java Basics - Anfänger-Themen 2
D JButton - Design ändern Java Basics - Anfänger-Themen 8
S Frage zum Design der Vererbung (Kartendeck und Dupletten) Java Basics - Anfänger-Themen 12
S Design Frage Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben