Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log4J change File path dynamically

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?

like image 858
Metalhead89 Avatar asked Aug 07 '12 12:08

Metalhead89


2 Answers

I think you meant "my.log" not "{my.log"

System.setProperty("my.log", "C:/logfile.log");

I wouldn't imagine you can change this once the logging has started so you need to set this as early in your program as possible.

BTW: You can sub-class FileAppender to make it behave any way you like.

like image 62
Peter Lawrey Avatar answered Oct 22 '22 04:10

Peter Lawrey


You have a misspelling: "{my.log" instead of "my.log"

like image 41
IllegalArgumentException Avatar answered Oct 22 '22 06:10

IllegalArgumentException