Гораздо проще сделать следующее:
В log4j.xml определите переменную как $ {variable}:
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="File" value="${logfilename}.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d::[%t]::%-5p::%c::%x - %m%n" />
</layout>
</appender>
Затем убедитесь, что вы установили системное свойство при запуске JVM, например:
java -Dlogfilename=my_fancy_filename example.Application
Это создаст динамическое имя файла журнала: my_fancy_filename.log
В качестве альтернативы, вы можете установить системное свойство в коде, если вы делаете это до создания регистратора (это полезно, например, если вы хотите, чтобы ваш PID был в ваших журналах). Такие как:
System.setProperty("logfilename", "a_cool_logname");
Как только это будет установлено, вы можете продолжать и получать свои регистраторы как обычно, и они будут регистрировать в динамический файл (будьте осторожны с теми статическими регистраторами, которые создают регистраторы перед выполнением вашего основного метода).