log4j Pfade

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

Code:
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.

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

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

hilft dir das weiter?

Java:
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
 
Hallo!

Code:
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
 
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.
Code:
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
 
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:
Code:
Manifest-Version: 1.0
Class-Path: lib/log4j/log4j-1.2.13.jar
Main-Class: de.tutorials.Log4JExample

Aufruf unter Linux:
Code:
[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
 
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?

Code:
<?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>
 
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:
Code:
<?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
 

Neue Beiträge

Zurück