Log4J Datei ändern Pfad dynamisch
Möchte ich ändern Sie den Pfad und den Dateinamen meiner log4j-Protokolldatei dynamisch.
Ich habe gelesen, eine Menge von Seiten und fast alle sagen mir, dass ich sollte, verwenden Sie die system-Eigenschaften wie die hier:
so ändern Sie die log4j-Protokolldatei wird dynamisch?
Also meine log4j.properties-Datei sieht wie folgt aus:
log4j.logger.JDBC_LOGGER=INFO,jdbcTests
log4j.additivity.JDBC_LOGGER = false
log4j.appender.jdbcTests=org.apache.log4j.FileAppender
log4j.appender.jdbcTests.File=${my.log}
log4j.appender.jdbcTests.layout=org.apache.log4j.PatternLayout
log4j.appender.jdbcTests.append = false
log4j.appender.jdbcTests.layout.ConversionPattern=%d{yyyy mm dd HH:mm:ss} %5p %C:Line %L - %m%n
In meiner main-Methode werde ich mein neues system Eigenschaft:
System.setProperty("{my.log", "C:/logfile.log");
Aber ich bekomme nur eine Fehlermeldung:
log4j:ERROR setFile(null,false) call failed.
java.io.FileNotFoundException:
at java.io.FileOutputStream.open(Native Method)....
Und wenn ich versuche zu Lesen, mein set system-Eigenschaft mit:
System.out.println(System.getProperty("my.log"));
es null zurück.
Was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, du meintest "meine.log" nicht "{meine.log"
Wäre ich mir nicht vorstellen, Sie können dies ändern, sobald die Anmeldung begonnen hat, so müssen Sie dies schon in Ihrem Programm, wie möglich.
BTW: Sie können die sub-Klasse FileAppender zu machen, Verhalten sich so, wie Sie wollen.
System.setProperty("my.log", "C:/logfile.log");
ich diese in der ersten Zeile meiner main-Methode, aber ich bekomme immer noch den gleichen FehlerSystem.out.println(System.getProperty("my.log"));
funktioniert jetzt. Aber ich kann immer noch nicht ändern, die log-Pfad dynamischlog4j:ERROR setFile(null,false) call failed. java.io.FileNotFoundException: C:\logfile.log (Zugriff verweigert) at java.io.FileOutputStream.open(Native Method)
Zugriff verweigert vor = Zugriff verweigertstatic Log
in der Klasse für Haupt -, wird diese zuerst aufgerufen werden. Möglicherweise müssen Sie fügen Sie einen statischen block an den Anfang der Klasse, die enthält Ihremain()
private static Logger logger = null;
und in die Main ich schrieb:System.setProperty("my.log", "C:/Workspace/logfile.log"); logger = Logger.getLogger(Main.class.getName());
Jetzt funktioniert alles sehr gut:)static { System.setProperty("my.log", "C:/Workspace/logfile.log"); } private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
ganz am Anfang.Sie haben einen Rechtschreibfehler: "{meine.log" statt "meine.log"
Setzen Sie einfach die Eigenschaft vor dem instanziieren logger, sobald Sie initilize den logger, setzen der Eigenschaft wird nicht Wert. genau wie unten: