Tomcat + axis2 + log4j

Desenvolvi um web service usando o Axis2 como framework e o Tomcat 6.0 como servidor web. Até aí tudo funciona bem. O problema surge quando eu tento adicionar o log4j ao meu web service.

Inicialmente coloquei o arquivo log4j.xml em pastas internas ao diretório da do meu ws. Aparentemente, o ws não consegue acessar o arquivo de configuração log4j.xml e portanto não encontra os appenders necessários para o log.

Tentei então colocar esse arquivo na pasta …WEB-INF/classes do próprio Tomcat e aí funcionou. O problema neste caso é que o arquivo de log passa a constar todo o log de todas as webapps do Tomcat.

Alguém sabe o que posso fazer para ter um arquivo de log somente para o meu web service?

Segue meu método que faz o log e o log4j.xml:

public static void writeLog(String message, Logger logger, Level level)
{
try
{
logger.log(level, message);
} catch (Exception e) {
logger.error("Erro ao escrever no arquivo de log - " + e.toString()+ ": " + e.getMessage());
}
}

<?xml version="1.0" encoding="UTF-8" ?>

<log4j:configuration xmlns:log4j=“http://jakarta.apache.org/log4j/” debug=“false”>

<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%p %c{1}] %m%n" />
	</layout>
</appender>

<!-- Declarar local correto para salvar o arquivo em produção -->
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
	<param name="file" value="MoWASMSWS.log" />
	<param name="append" value="true"/>
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%p %c{1}] %m%n" />
	</layout>
</appender>

<root>
	<appender-ref ref="fileAppender"/>
	<appender-ref ref="consoleAppender" />
</root>

</log4j:configuration>

Obrigado desde já.

Guilherme

Não sei como se faz em xml.
Mas no arquivo de properties eu fazia assim:
log4j.com.dominio.aplicacao=INFO

E nesse caso INFO deve ser o quê? O nome do meu web service?

não o nível do log que você deseja ERROR-WARN-INFO-DEBUG

Ah, é verdade.

Então a parte de dominio.aplicacao é que eu tenho que customizar? E como?

[quote=guilherme.fre]Ah, é verdade.

Então a parte de dominio.aplicacao é que eu tenho que customizar? E como? [/quote]

sim, você deve colocar o pacote das suas classes.
ex: log4j.br.com.silvionetto.helloworld=INFO

O que isso significa que você quer o log em nível INFO das classes do pacote:
com.silvionetto.helloworld.
Sendo assim qualquer classe que estiver a baixo desse pacote irá gerar log.
Lembrando, se a classe tiver log.info(“menssagem”);

ex:

package com.silvionetto.helloworld;

import org.apache.log4j.Logger;

public class Hello {

Logger  logger = Logger.getLogger(Hello.class);

public void fazAlgo() {
  logger.info("Entrou em fazAlgo");      
}

}