I want to change the path and file name of my log4j logfile dynamically.
I have read a lot of pages and nearly every tell me that I should use system properties like here: how to change the log4j log file dynamically?
So my log4j.properties file looks like this:
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 my main method I am going to set my new system property:
System.setProperty("{my.log", "C:/logfile.log");
But I just get an error:
log4j:ERROR setFile(null,false) call failed.
java.io.FileNotFoundException:
at java.io.FileOutputStream.open(Native Method)....
And when I try to read my set system property with:
System.out.println(System.getProperty("my.log"));
it return null. What do I do wrong?
System.setProperty("my.log", "C:/logfile.log");
I set this in the first line of my main method but I still get the same error – Metalhead89 Aug 7 '12 at 13:12System.out.println(System.getProperty("my.log"));
works fine now. But I still cant change the log path dynamically – Metalhead89 Aug 7 '12 at 13:14log4j:ERROR setFile(null,false) call failed. java.io.FileNotFoundException: C:\logfile.log (Zugriff verweigert) at java.io.FileOutputStream.open(Native Method)
Zugriff verweigert = access denied – Metalhead89 Aug 7 '12 at 13:16static Log
in the class for your main, this will be called first. You may need to add a static block at the very start of the class which contains yourmain()
– Peter Lawrey Aug 7 '12 at 13:20static { System.setProperty("my.log", "C:/Workspace/logfile.log"); } private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
at the very start. – Peter Lawrey Aug 7 '12 at 13:34