# Wahrscheinlich Problem mit log4j.properties



## Tales (29. Jun 2011)

Hallo,

Mein Problem befasst sich mit folgende Fehlerausgabe in Eclipse:



> java.lang.NullPointerException
> at java.util.Properties$LineReader.readLine(Unknown Source)
> at java.util.Properties.load0(Unknown Source)
> at java.util.Properties.load(Unknown Source)
> ...



Fehler wird auch folgenden Ausschnitt verwiesen.


```
private static void initLogger() throws IOException {
		Properties logProperty = new Properties();

		logProperty.load(LoginPanel.class.getClass().getResourceAsStream("/config/log4j.properties"));

		PropertyConfigurator.configure(logProperty);
	}
```
Die log4j.Properties liegt wie man sieht nicht direkt im src-folder sondern in einem für alle properties angelegten Ordner. Der Fehler kommt bei der Ausführung in Eclipse. 

Vermutung 1 war, dass die "prop" nicht im classpath aufgenommen ist.
Möglich, aber an sich enthalten. Lösche ich diese aus dem Classpath dann erweitert sich die Fehlermeldung wie folgt. 


> log4j:WARN No appenders could be found for logger (de.versuch.application.run.Starter).
> log4j:WARN Please initialize the log4j system properly.


---> vorher war sie enthalten, danach war sie es nicht mehr ^^

Vermutung 2
Die prop ist zwar im Classpath aber wird beim Programmaufruf nicht berücksichtigt.

Vermutung 3
Fehler in der porp.
Für meine trüben Augen sieht die aber ganz i.O. aus.



> log4j.rootLogger=INFO, T
> 
> log4j.appender.T=de.versuch.gui.core.SdDatedFileAppender
> log4j.appender.T.layout=org.apache.log4j.PatternLayout
> ...



Erstmal danke das ihr den Schund gelesen habt.
Ich bitte hiermit um Hilfe um das ganze in Eclipse doch noch zum laufen zu bekommen.


----------



## bERt0r (29. Jun 2011)

Meiner Meinung nach kommt der Fehler daher, dass

```
LoginPanel.class.getClass()
```
null zurückliefert. Bin mit der Klasse jetzt nicht so vertraut, aber laut deinem StackTrace ist da der Fehler.


----------



## maki (29. Jun 2011)

```
LoginPanel.class.getClass().getResourceAsStream("/config/log4j.properties")
```
Was liefert das?

@bERt0r
class.getClass() kann gar nicht null liefern, die Zeilennummern in den Stacktraces sind falsch.


----------



## Tales (29. Jun 2011)

@maki:
Leider weiß ich nicht was du mit liefern und auf welchen Part du dich genau dabei beziehst.
Hab hier mal den Debugger angesetzt und im folgenden den Variablenausgabe im folgenden angefügt.




Uploaded with ImageShack.us


----------



## maki (29. Jun 2011)

Tales hat gesagt.:


> @maki:
> Leider weiß ich nicht was du mit liefern und auf welchen Part du dich genau dabei beziehst.


Den Part habe ich dir gezeigt, weise das Ergebniss einer temp. Varable zu, dann hast du wenigstens etwas dass du dir im Debugger oder per Sysouts/ Logging ansehen kannst.


----------



## Tales (29. Jun 2011)

Hmm. Ich muss gestehen ich komm nicht mit.
Du möchtest das Ergebnis des Streams wissen, richtig?

Leider weiß ich jetzt nicht wie ich das umsetzen kann. Zumal auch jeder weitere Quellcode nach 

```
LoginPanel.class.getClass().getResourceAsStream("/config/log4j.properties"
```
scheinbar nicht mehr ausgeführt wird.


----------



## maki (29. Jun 2011)

```
System.out.println("Stream ist " + LoginPanel.class.getClass().getResourceAsStream("/config/log4j.properties") );
```
Was gibt das aus?


----------



## Tales (29. Jun 2011)

Stream ist null


----------



## maki (29. Jun 2011)

Dann hast du die Ursache für deine NPE.
Jetzt müsstest du die Ursache dafür finden, warum die Datei nicht gefunden wird.

Liegt sie denn im CP im angegebenen Package? Offensichtlich nicht


----------



## Tales (29. Jun 2011)

Erstmal danke
Obwohl es eine Vermutung war, bin ich jetzt doch ziemlich überrascht.
Meine Ordnerstruktur sieht ungefähr wie folgt aus.

Projekt
   -config (hier sollen dann alle prop-dateien liegen
   -scr
      -Package1
      -Package2
   -lib  (Bilddaten oder andere Dokumente ich verwende)
   -jar (alle benötigten *.jar)

Im Classpath (cp) verweis ich auf das config verzeichnis.
	<classpathentry kind="src" path="config"/>
Dementsprechend sollte er ja auch die prop finden oder hab ich da nen gewaltigen Denkfehler?


----------



## Tales (29. Jun 2011)

ah sry. Package 1 und 2 liegen innerhalb des src. Hatte die Formatierung vergessen


----------



## maki (29. Jun 2011)

Landen denn die Dateien aus config im bin Ordner? (am besten per Explorer prüfen da Eclipse das bin verzeichnis versteckt)


----------



## Tales (29. Jun 2011)

Ja 
Sie werden auch wenn ich sie lösche wieder erzeugt.


----------



## Tales (29. Jun 2011)

hmm. Ich revidiere meine vorhergehende Antwort.
Ich hatte sie mal gelöscht und er hatte sie darauf wiederhergestellt.
Jetzt hab ich das nochmal versucht mit negativen resultat


----------



## maki (29. Jun 2011)

Kopiere sie mal manuell rein und sieh mal was apssiert.


----------



## Tales (29. Jun 2011)

Fehler bleibt bestehen.

Ich kann mir vorstellen das ich damals die prop. als *.jar lib beim java build path mit drin hatte.
Jedenfalls erzeugt er in dem falle im Bin verzeichnis auch wieder die entsprechende prop.


----------



## maki (29. Jun 2011)

Wie lautet der vollständige Pfad inkl Name der Propdatei?


----------



## Tales (29. Jun 2011)

D:\Daten\Desktop\Java\Workspace\Versuch\config\log4j.properties


----------



## bERt0r (29. Jun 2011)

Was ich nicht verstehe ist, warum du den InputStream mittels des ClassLoaders der Klasse "LoginPanel" erstellst.
Warum nicht

```
File f=/config/log4j.properties;
FileInputStream fips=new FileInputStream(f);
logProperty.load(fips)));
```
Dadurch könntest du auch gleich mal überprüfen, ob deine relative Pfadangabe auch korrekt ist (File ausgeben).
Ich kenn mich mit den ClassLoaders nicht so aus, aber

```
logProperty.load(Properties.class.getClass().getResourceAsStream("/config/log4j.properties"));
```
würde doch eher zutreffen, weil du ja eine Property Datei und keine LoginPanel Datei einliest.


----------



## maki (29. Jun 2011)

Das mit class.getResourceAsStream ist schon richtig, vielleciht mal den führenden [c]/[/c] weglassen.
Welche Klasse genommen wird ist egal.

Smartly load your properties - JavaWorld


----------

