# log4j Pfade



## DerKleineVomSee (20. Mai 2006)

Hi, 
ich nutzte in meinen Projekt Log4j. Mittels der folgende Zeile lade ich die log4j Properties Datei.


```
PropertyConfigurator.configure(log4jPath);
```

Nun möchte ich, dass die Log Datei dort gespeichert wird, wo das Jar File des Projektes ausgeführt wird. Hierzu möchte ich nicht immer Änderung an der Properties Datei vornehmen und folgende Zeile anpassen.


```
log4j.appender.r.File=/home/blabla/Desktop/LogFile.log
```

Kennt einer von euch eine Möglichkeit wie man das Problem umgehen kann?
Danke schonmal


----------



## flashray (20. Mai 2006)

Hallo DerKleineVomSee,

hilft dir das weiter?


```
import java.io.File;
import java.net.URISyntaxException;

public class CurrentDirExample {

	public static void main(String[] args) {
		File file = new File("");
		System.out.println(file.getAbsolutePath());
		try {
			System.out.println(CurrentDirExample.class.getProtectionDomain()
					.getCodeSource().getLocation().toURI().getPath());
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}
	}
}
```


Vg Erdal


----------



## DerKleineVomSee (20. Mai 2006)

Nein, dass hilft mir leider nicht weiter.


----------



## Thomas Darimont (21. Mai 2006)

Hallo!


```
log4j.rootLogger=INFO, logfile

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log4jexample.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
```
Wenn du die Pfadangabe bei .File weglässt wird das LogFile im selben Verzeichnis abgelegt aus dem die Anwendung gestartet wurde.

Gruß Tom


----------



## DerKleineVomSee (21. Mai 2006)

So habe ich das auch schon probiert, aber die Log Datei wird dann im Homeverzeichnis des Benutzters angelegt (Linux).  Also nicht da wo die Jar Datei ausgeführt wird. Kann es damit zusammmenhängen, dass die log4jProperties Datei nicht in die Jar Datei mit einkompiliert ist?

Hier aber mal ein Auszug aus meiner log4jProperties Datei. Vielleicht ist ja doch etwas falsch.

```
log4j.rootCategory=debug, r
log4j.rootLogger=debug, r 

log4j.appender.r=org.apache.log4j.FileAppender
log4j.appender.r.File=TestLog.log
log4j.appender.r.Threshold=error
log4j.appender.r.layout=org.apache.log4j.PatternLayout
log4j.appender.r.layout.ConversionPattern=[%-5p] [%d{ISO8601}] [%t][%C - %L] - [%m]%n
```


----------



## Thomas Darimont (21. Mai 2006)

Hallo!

Also bei mir klappt das so sowohl unter Windows XP als auch unter Linux:
Beispiel:
http://www.tutorials.de/forum/java/244247-printstacktrace-log-datei-loggen.html

Mein manifest:

```
Manifest-Version: 1.0
Class-Path: lib/log4j/log4j-1.2.13.jar
Main-Class: de.tutorials.Log4JExample
```

Aufruf unter Linux:

```
[tom@linuxbox foo]$ pwd
/mnt/hgfs/sharedfolder/foo
[tom@linuxbox foo]$ ll
insgesamt 1
drwx------    1 root     root            0 21. Mai 2006  lib
-rwx------    1 root     root         1350 21. Mai 2006  log4jrun.jar
[tom@linuxbox foo]$ java -jar log4jrun.jar
[tom@linuxbox foo]$ ll
insgesamt 2
drwx------    1 root     root            0 21. Mai 2006  lib
-rwx------    1 root     root          230 21. Mai 2006  log4jexample.log
-rwx------    1 root     root         1350 21. Mai 2006  log4jrun.jar
[tom@linuxbox foo]$ cat log4jexample.log
2006-05-21 15:10:30,816 INFO [de.tutorials.Log4JExample] - Oh oh
java.lang.Exception: Something went wrong...
        at de.tutorials.Log4JExample.someMethod(Log4JExample.java:30)
        at de.tutorials.Log4JExample.main(Log4JExample.java:21)
[tom@linuxbox foo]$
```

Gruß Tom


----------



## TheGreenDragon (31. März 2009)

Hallo,

ich wollte für meine Frage nicht extra ein neues Thema auf machen, deswegen frag ich hier mal 

Also ich habe folgende log4j.xml und will nun, dass meine log-Datei in den Ordner meines Web-Service landet ohne das ich den kompletten Pfad angeben muss.
In Java kann ich einfach ./WEB-INF/src oder sonst was schreiben aber durch ./WEB-INF/ weis mein Service bescheid. Wenn ich jedoch ./WEB-INF/protokoll.log in meiner log4j.xml schreibe erzeugt er mir anstatt in meinem Service, eine Logdatei in meinem Tomcat Ordner.

Was muss ich tun damit er in den WEB-INF Ordner die Datei anleget?


```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
	<appender name="file"
		class="org.apache.log4j.DailyRollingFileAppender">
		
		<param name="File" value="./WEB-INF/protokoll2.log" />
		<param name="DatePattern" value="'.'yyyy-MM-dd"/>
		<param name="Append" value="true"/>
		<param name="threshold" value="debug" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
		</layout>
	</appender>
	<root>
		<priority value="ALL"></priority>
		<appender-ref ref="file" />
	</root>
</log4j:configuration>
```


----------



## TheGreenDragon (2. April 2009)

Da wohl keiner mehr dieses Thema beachtet, push ich es mal wieder nach oben


----------



## takidoso (2. April 2009)

Hi,
ich nehme an, er schreibt Deine Log-Datei deswegen in den Tomcat ordner, weil, Dein Programm von dor bzw von Tomcat aus gestartet wird, kann das sein?

Nun kenne ich mich nicht so sonderlich mit Tomcat-Spezifika aus, aber Du kannst Dir vielleicht eine Systemvariable in die JVM, unter Der Dein Programm läuft anlegen, die Du dann wiieder für den Pfad nutzen könntest.

sieht in der log4J dann ungefär so aus:

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
	<appender name="file"
		class="org.apache.log4j.DailyRollingFileAppender">
		
		<param name="File" value="${HOME_DIR}/logs/protokoll2.log" />
		<param name="DatePattern" value="'.'yyyy-MM-dd"/>
		<param name="Append" value="true"/>
		<param name="threshold" value="debug" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
		</layout>
	</appender>
	<root>
		<priority value="ALL"></priority>
		<appender-ref ref="file" />
	</root>
</log4j:configuration>
```

Obige Konfiguration geht davon aus, dass in der JVM eine System-Variable *HOME_DIR* angelegt ist, in der beispielsweise Dein Anwendungsverzeichnis wäre, unter dessen Unterordner *logs* die Log-Datei geschrieben werden soll.
Wenn ich mich nicht irre werden Verzeichnisse von selbst angelegt ohne weiteres Zutun.

hope it helps

Takidoso


----------



## TheGreenDragon (6. April 2009)

Hallo,

und Danke für deine Antwort. Gibt es noch mehr solcher Variablen (eine Liste wäre ganz gut) ? 

Gruß
'GreenDragon'


----------



## takidoso (6. April 2009)

Du kannst Dir alle Systemvatiablen anzeigen und beliebig ausgeben lassen mit 

```
System.getProperties()
....
```

mit der *-D*_-Option_ beim Aufruf Deines Programmes kannst Du zusätzliche System-Properites einbringen.


----------

