2015-07-23 3 views
0

Я пытаюсь использовать log4j2 с динамическим расположением каталога журнала. Я написал код для этого, как:log4j2 не работает для JAR

DateFormat dateFormat = new SimpleDateFormat(Constants.DATE_FORMAT); 
Date date = new Date(); 

String currentDir = System.getProperty("user.dir") + "/" + Constants.OUTPUT_FOLDER_NAME + "/" + dateFormat.format(date); 
System.setProperty("logDir", currentDir); 
final LoggerContext ctx = (LoggerContext)LogManager.getContext(false); 
ctx.reconfigure(); 

log4j2.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="trace"> 
    <Appenders> 
     <File name="file" fileName="${sys:logDir}/log.log"> 
      <PatternLayout> 
       <Pattern>%d{ISO8601} [%t] %C %M - %p: %m%n</Pattern> 
      </PatternLayout> 
     </File> 

     <File name="report" fileName="${sys:logDir}/report.txt"> 
      <PatternLayout> 
       <Pattern>%m%n</Pattern> 
      </PatternLayout> 
     </File> 

     <Console name="console" target="SYSTEM_OUT"> 
      <PatternLayout> 
       <Pattern>%d{ISO8601} - %p: %m%n</Pattern> 
      </PatternLayout> 
     </Console> 
    </Appenders> 

    <Loggers> 

     <Logger name="Report" level="info" additivity="false"> 
      <AppenderRef ref="report" level="INFO"/> 
     </Logger> 

     <Root level="info"> 
      <AppenderRef ref="file" level="INFO" /> 
      <AppenderRef ref="console" level="INFO" /> 
     </Root> 
    </Loggers> 
</Configuration> 

файлы генерируются хорошо, когда я запускаю это в Eclipse, но когда я запускаю основной класс моей программы используя файл JAR, содержащий скомпилированный основной класс по классам, как:

java -cp CLASSPATH -Dlog4j.configuration=file:XMLFILE ClassName args 

печатает только «ошибка» сообщения на консоль. Структура каталогов и файлы также не создаются. Что я делаю не так?

Спасибо!

ответ

1

Очевидно, что Logger не может найти вашу конфигурацию. Он экспортируется в JAR (смотрите с помощью архивного проводника)? Попытайтесь выяснить, почему это не так, как должно быть, и обновлять вашу программу.

+1

спасибо! Я не включал каталог XML-файла в путь к классам. –

0

Местонахождение должно быть указано -Dlog4j.configurationFile, не -Dlog4j.configuration.

http://logging.apache.org/log4j/2.x/faq.html#config_location

+0

По моему опыту, '-Dlog4j.configuration' также работает с URL-адресом, например' file: path/to/file.xml'. Я тоже пошел с '-Dlog4j.configurationFile', хотя :) –

+0

-Dlog4j.configuration работает только в log4j-1.x, а не в log4j2. Но вы можете использовать URL как в log4j-1.x, так и в log4j2. –

Смежные вопросы