Problema com o Commons Logging / Log4j instalação na primavera webapp com o tomcat 6

StackOverflow https://stackoverflow.com/questions/217929

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho um problema com um registo de configuração em um apring webapp implantado sob o tomcat 6.

O webapp usa o commons-logging api, em tempo de execução log4j deve ser usado.O arquivo de log é criado, mas permanece vazia - sem entradas de log de ocorrer.

o programa de configuração é a seguinte:

WEB-INF/web.xml:

 <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>

WEB-INF/classes/commons-logging.propriedades:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

WEB-INF/log4j.xml:

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    ...
  </appender>
  <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${catalina.home}/logs/my.log"/>
    ...
  </appender>

  <logger name="my.package">
    <level value="INFO"/>
  </logger>

  <root>
    <level value="ERROR"/>
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </root>
</log4j:configuration>

O arquivo de logs/o meu.log é criado, mas não há registos aparecem.O são informações de logs do tomcat console, mas não com o padrão de layout configurado.

O commons-logging-1.1.1.jar e log4j-1.2.14.jar estão incluídos no WEB-INF/lib.Alguma idéia do que está errado aqui?

Foi útil?

Solução

Há diversos casos documentados sobre as pessoas aviso web sobre o uso de commons-logging. Tanto assim, que SLF4J está ganhando muita popularidade.

Considerando que você não está interessado em usar Tomcat com Log4j, você deve apenas usar Log4j diretamente na sua aplicação. Especialmente se não há nenhuma chance de que você vai estar trocando estruturas madeireiras no futuro. Vai reduzir a complexidade da sua aplicação, e se livrar de todos os problemas do carregador de classe que você está tendo com commons-logging.

Este deve ser um relativamente fácil procurar e substituir em seu texto, como commons-logging e log4j tanto para uso uma estrutura chamada semelhante para os seus métodos de registro.

Outras dicas

Tenha cuidado especial que você tem não log4j.jar colocado no diretório commons / lib Tomcat. Se as cargas carregador de classe raiz das bibliotecas log4j, você vai correr em conflitos e problemas de inicialização quando seus webapps também tentar usar log4j.

Se você precisa usar log4j para registro comum Tomcat, você precisa ter cuidado para que seus webapps não tente log4j carga também. Se você tiver vários webapps no servidor, então você precisa de disciplina que a inicialização log de cada webapp não pisar a inicialização de outros webapps. Cada webapp precisará usar único Logger IDs, o que pode ser conseguido com nomes de pacotes únicos.

Usando um log4j comum no Tomcat com vários webapps provoca sérios conflitos quando você tem bibliotecas compartilhadas que todos querem fazer o registo, como Hibernate ou Primavera. O próximo webapp que tenta inicializar log4j pode fechar o registador do anterior. Pode ser uma bagunça.

Eu tive problema semelhante e encontrou uma correção agora. Comece tomcat com parâmetro adicional:

-Dorg.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl

Você precisa compilar o componente extra para commons-log completo. Por padrão Tomcat 6 utiliza uma implementação codificado de commons-logging que sempre delegados java.util.logging.

instruções de construção aqui http://tomcat.apache.org/tomcat- 6.0-doc / building.html

Em seguida, substitua o tomcat-juli.jar no diretório / bin do Tomcat e coloque o tomcat-juli-adapters.jar no diretório / lib, juntamente com log4j e configuração.

Se você estiver usando log4j + registro comum, você pode evitar a maioria das configurações acima. registro comum LogFactory ter um recurso de descoberta semelhante ao JAXP, no seguinte precedência, em busca de implementações Entrar, 1. configuração commons-logging.properties arquivo atributo org.apache.commons.logging.Log dentro 2. propriedade do sistema org.apache.commons.logging.Log 3. Se o Log4J disponível no caminho da classe, utilizar a classe correspondente invólucro (Log4JLogger). 4. Jdk14Logger 5. SimpleLog

apenas certifique-se, tanto ordinária-logging.jar e-logging-api.jar comum e log4j.jar no classpath.

Pode ser que eu esteja errado.Por favor, tente o seguinte:

A) Adicionar appender para a minha.pacote:OU B) Reduzir o log de leve de raiz para INFO

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top