как использовать log4j для записи файла внутри каталога моего проекта?

#java #tomcat #servlets #log4j

#java #tomcat #сервлеты #log4j

Вопрос:

У меня есть файл свойств log4j, который создает файл внутри моей папки tomcat> bin, но вместо этого он может записать файл журнала в корневой каталог моего проекта? веб-приложения> тест>___?

Вот содержимое моего файла свойств log4j.

 #define the console appender
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender

# now define the layout for the appender
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%t %-5p %c{3} - %m%n

log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.File=/test/a.log
log4j.appender.rollingFile.MaxFileSize=10MB
log4j.appender.rollingFile.MaxBackupIndex=2
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%p %t %c - %m%n

# now map our console appender as a root logger, means all log messages will go to this appender
#for console printing
#log4j.rootLogger = DEBUG, consoleAppender   

#for file printing
log4j.rootLogger = DEBUG, rollingFile   
  

Комментарии:

1. Обычно я просто жестко кодирую местоположение. Я думаю, что относительный путь — плохая идея в веб-приложениях, которые ваша среда может меняться в зависимости от контейнера.

Ответ №1:

Попробуйте заменить это:

 log4j.appender.rollingFile.File=/test/a.log
  

с помощью этого:

 log4j.appender.rollingFile.File=../webapps/test/a.log
  

Примечание (Стивен Си) — «.. /» означает, что это решение зависит от того, делает ли используемый вами механизм запуска Tomcat $ CATALINA_HOME текущим каталогом перед JVM, на котором размещен Tomcat. Некоторые делают, а некоторые нет.

Комментарии:

1. разве «../webapps /» не зависит от текущего каталога при запуске JVM?

2. @Stephen: Да. Но когда вы используете TOMCAT, это будет папка bin tomcat, так что пока OP использует TOMCAT, это правильно.

3. Вы должны быть более конкретными, чем «правильное использование tomcat». Что именно вы имеете в виду под этим?

4. @StephenC Я полагаю, вы имеете в виду, что я должен ответить более общим образом, а не только на tomcat, как у вас в этом вопросе. В этом случае я также чувствую это и поддержал ваш ответ за это, я не обновил свой ответ, потому что это может выглядеть как исправление ваших ошибок из ответа другого.

5. Нет. Я имею в виду, что вы должны сказать, что вы имеете в виду под «Но когда вы используете TOMCAT, это будет папка bin tomcat, поэтому, пока OP использует TOMCAT правильно «. . Очевидно, у вас есть определенная ментальная модель того, что такое «правильное использование tomcat». Например, запуск tomcat определенным способом. Я просто предлагаю вам изложить это по буквам… чтобы люди, читающие принятый ответ, ЗНАЛИ, что им нужно сделать, чтобы заставить ваше решение работать.

Ответ №2:

Конфигурации log4j понятны "${catalina.home}" , поэтому…

  log4j.appender.rollingFile.File=${catalina.home}/webapps/test/a.log
  

Однако я не думаю, что это хорошая идея помещать журналы в webapps дерево, потому что они могут быть унесены, если ваше веб-приложение будет повторно размещено.

Поместите их ${catalina.home}/logs вместо этого.

Или, что еще лучше, поместите их в специфичное для дистрибутива обычное место для размещения файлов журнала приложения; например, «/var/ spool / …» или «/var/log / …».

Размещение файлов журнала в стандартных местах означает, что у кого-то другого (например, у парня, который является системным администратором резервного копирования, когда вы находитесь в отпуске) остается меньше места для проверки, не заполняется ли файловая система старыми файлами журнала.

Комментарии:

1. Спасибо, мне было просто любопытно, так как есть и другие проекты, где я сохранял журналы, и моя папка bin была заполнена полными журналами. Итак, я решил пойти на это. В любом случае, спасибо. Сначала Гарри ответил на мой вопрос