Spring MVC и Log4j - PullRequest
       8

Spring MVC и Log4j

0 голосов
/ 23 июня 2011

Я пытаюсь запустить Log4j в приложении Spring MVC, но не могу получить информацию, что не так. Каждый пост в блоге одинаков: Это действительно просто. Просто поместите log4j.properties в каталог / WEB-INF / classes. Но для меня это не работает. Проблема в том, что нет места искать сообщение об ошибке. Единственное, что я знаю, это то, что ожидаемый файл журнала не был создан. Есть ли возможность отладить его? Неужели положить log4j.properties файл в /WEB-INF/classes достаточно?

Вышеупомянутый log4j.properties файл следует:

#Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:\\workspace-trainee-actual\\0pokusy\\Sprung\\logik.txt
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Root logger option
log4j.rootLogger=trace, file

Контроллер с использованием Log4j:

@Controller
public class HelloWorldController {
    private Logger log = Logger.getRootLogger();

    @RequestMapping("/")
    public ModelAndView base() {
        log.debug("base URI");
        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        return mv;
    }
}

Единственный верный факт, что он работает, поэтому log не равен нулю и библиотека Log4j доступна.

Ответы [ 4 ]

0 голосов
/ 28 мая 2014

Попробуйте с

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/properties/log4j.properties</param-value>
</context-param>

 <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
 </listener>
0 голосов
/ 24 июня 2011

Я изменил порог регистрации в Geronimo на отладочный и обнаружил «2011-06-24 07: 33: 18,353 DEBUG [root] base URI». Я думаю, что есть конфликт. Приложение представляет собой один процесс, один экземпляр JVM с тысячами классов, но только с одним корневым логгером для всех из них.

Швы, что вы правы:

Из документации Geronimo :

Обратите внимание, что в любом случае, если вы не используете скрытые классы или обратную загрузку классов для загрузки своей собственной копии log4j отдельно от копии geronimo, log4j не будет автоматически читать файлы log4j.properties, которые вы могли включить в ваш путь к классам.

Я нашел последнее "решение" из документации очень интересным:

Скопируйте файл log4j.properties вручную в соответствующее место, например, var / my-app / log4j.properties. Нет необходимости включать этот файл в ваше приложение.

Потому что это позволяет вам выводить конфигурацию log4j. Таким образом, Operations-Guy может управлять и изменять конфигурацию log4j. И вам не нужно собирать / развертывать новую версию, если, например, каталог, в котором хранятся файлы, изменился.

0 голосов
/ 24 июня 2011

Обход

Система всегда работает нормально. Система Log4j настроена для нашего экземпляра виртуальной машины Java. Джеронимо уже сделал это. Мы не можем перенастроить корневой логгер, но мы можем его использовать. Порог по умолчанию - INFO, и приложение использует корневой логгер для сообщения отладки. Таким образом, мы нигде этого не видим.

Если порог уменьшен до DEBUG, сообщение появляется в журнале Geronimo. Я изменил в файле $GERONIMO_HOME/var/log/server-log4j.properties строку в начале:

log4j.rootLogger=DEBUG, CONSOLE, FILE
И в $GERONIMO_HOME/var/log/geronimo.log я могу тогда прочитать:
2011-06-24 20:02:21,375 DEBUG [root] base URI
По какой-то неизвестной причине ни под Linux, ни под Windows не создан отдельный выходной файл. Мы можем найти сообщение только в журнале сервера, но это не имеет значения, мы можем его преодолеть. Позвольте переименовать регистратор в конфигурации Log4j:
#Root logger for application
log4j.logger.springTestLogger=TRACE, APLOK
И в коде соответственно:
private Logger log = Logger.getLogger("springTestLogger");
Мы легко создаем отдельный лог-файл под Linux:
cat $GERONIMO_HOME/var/log/geronimo.log|grep springTestLogger > separe.log
0 голосов
/ 23 июня 2011

Попробуйте добавить

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

в файл web.xml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...