Как я могу получить JSF для входа в log4j - PullRequest
1 голос
/ 10 февраля 2012

Я занимаюсь разработкой приложения JSF и хочу использовать log4j, а не регистратор по умолчанию.

По умолчанию ведется запись в стандартный логгер. У меня есть несколько интеграционных тестов, которые используют встроенный tomcat для запуска моего приложения, и вывод журнала вызывает ошибку нехватки памяти при запуске из команды лежат в Windows. Так что я хочу использовать log4j, это все равно выбранный логгер для приложения и отфильтровать большую часть журналов JSF.

Я обнаружил в сети пару битов, которые предлагают все, что мне нужно сделать, поместить JAR-файл log4j в путь к классу с соответствующими log4j.properties и исключить JAR-файл регистрации общего достояния. Я пробовал это, и он не работает.

Это мой web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns="http://java.sun.com/xml/ns/javaee" 
            xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
            metadata-complete="true"
            id="WebApp_ID" 
            version="3.0">

  <display-name>Embedded Tomcar</display-name>
  <welcome-file-list>
    <welcome-file>faces/index.xhtml</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>

  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>

  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>

  <context-param>
    <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
    <param-value>true</param-value>
  </context-param>

  <context-param>
    <param-name>org.apache.myfaces.PRETTY_HTML</param-name>
    <param-value>true</param-value>
  </context-param>

  <context-param>
    <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
    <param-value>false</param-value>
  </context-param>

  <context-param>
    <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
    <param-value>true</param-value>
  </context-param>

  <listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
  </listener>  

</web-app>

Код моего прототипа также есть на github: https://github.com/pjgrenyer/EmbeddedTomcat

1 Ответ

0 голосов
/ 10 февраля 2012

Возможно, вы захотите подумать о настройке своего приложения для Logging Facade, который позволяет перенаправлять все журналы приложений из Log4j и Apache Commons Logging через один источник. Если сторонний jar решил использовать Apache Commons, то ничто иное, как обратный инжиниринг или настройка доступного кода FOSS, не заставит его использовать Log4j напрямую.

Чаще всего распространяемые библиотеки Java будут регистрировать через Logging Facade, а не напрямую через Log4j или аналогичную реализацию ведения журнала, потому что они не хотят ненужных зависимостей, хотя ИМХО это всегда было вопросом путаницы и боли для меня. По сути, Apache Commons - это Фасад лесозаготовок, но он отстой, поэтому я понимаю, почему вы хотите от него отказаться.

Обратите внимание на SLF4J, последние версии Hibernate требуют этой зависимости, поэтому, если вы используете Hibernate, у вас, вероятно, уже есть это в вашем classpath.

http://www.slf4j.org/

...