Log4j no Vraptor

10 respostas
G

Olá,

Como eu faço pra criar um log usando o Log4j no Vraptor? O Vraptor não oferece injeção de dependência pra essa classe? Eu tentei fazer o seguinte:

import org.apache.log4j.Logger;

@Resource
public class PagesController {

	private final Result result;
	private final Logger logger;

	public PagesController(Result result, Logger logger) {
		this.result = result;
		this.logger = logger;
	}
	
	...

}

O servidor inicia normalmente, mas as páginas do site não carregam.

10 Respostas

Lucas_Cavalcanti

você pode fazer sem ser pelo construtor:

@Resource  
public class PagesController {  
   private static final Logger logger = LoggerFactory.getLogger(PagesController.class);
   //...
}

Os imports são de org.slf4j

G

Lucas Cavalcanti:
você pode fazer sem ser pelo construtor:

@Resource  
public class PagesController {  
   private static final Logger logger = LoggerFactory.getLogger(PagesController.class);
   //...
}

Os imports são de org.slf4j

Eu fiz isso, mas não está logando. Ou eu que não consegui achar o log… No console não imprime o log e já procurei em alguns arquivos do servidor e não achei. Onde que fica a informação logada?

Lucas_Cavalcanti

vc precisa de uma configuração pra isso. Por exemplo um xml como esse:

ajustando para os pacotes da sua aplicação… esse arquivo precisa estar no classpath.

G

Lucas Cavalcanti:
vc precisa de uma configuração pra isso. Por exemplo um xml como esse:

ajustando para os pacotes da sua aplicação… esse arquivo precisa estar no classpath.

Sim, eu já tenho esse arquivo no meu projeto. Eu usei o template do Vraptor, que já vem com esse arquivo. Inclusive, eu acho que o Vraptor consegue logar no console. porque aparecem as seguintes mensagens quando eu inicio o servidor:

INFO: Initializing ProtocolHandler [“http-bio-8080”]
INFO: Initializing ProtocolHandler [“ajp-bio-8009”]
INFO: Initialization processed in 1013 ms
INFO: Starting service Catalina
INFO: Starting Servlet Engine: Apache Tomcat/7.0.32
INFO: Starting ProtocolHandler [“http-bio-8080”]
INFO: Starting ProtocolHandler [“ajp-bio-8009”]
INFO: Server startup in 6042 ms

Porém, a mensagem que eu mando logar não aparece.

Lucas_Cavalcanti

Esse é o log até o startup… vc chegou a fazer alguma requisição?

o jar do log4j e do slf4j-log4j estão no classpath?

G

Lucas Cavalcanti:
Esse é o log até o startup… vc chegou a fazer alguma requisição?

o jar do log4j e do slf4j-log4j estão no classpath?

Fiz uma requisição sim. Inclusive eu mando logar no controller de uma requisição.

E os 2 jars estão no classpath.

Lucas_Cavalcanti

posta aqui como está o seu log4j.xml e como vc tá fazendo o log no controller, plz

G
Lucas Cavalcanti:
posta aqui como está o seu log4j.xml e como vc tá fazendo o log no controller, plz

Log4j.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        
        <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" 
                                value="%d{HH:mm:ss,SSS} %5p [%-20c{1}] %m%n"/>
                </layout>
        </appender>

        <category name="br.com.caelum.vraptor">
                <priority value="INFO" />
                <appender-ref ref="stdout" />
        </category>
        
        <category name="org.springframework">
                <priority value="INFO" />
                <appender-ref ref="stdout" />
        </category>
 
</log4j:configuration>

No controller:

@Resource
public class IndexController {

	private static final Logger logger = LoggerFactory.getLogger(IndexController.class);

	@Path("/")
	public void index() {
		logger.error("Ocorreu um erro no servidor.");
	}
}
Lucas_Cavalcanti

faltou incluir o appender do pacote das suas classes:

<category name="br.com.seu.pacote.base.aqui">  
       <priority value="INFO" />  
       <appender-ref ref="stdout" />  
</category>
G

Lucas Cavalcanti:
faltou incluir o appender do pacote das suas classes:

<category name="br.com.seu.pacote.base.aqui"> <priority value="INFO" /> <appender-ref ref="stdout" /> </category>

Agora funcionou! :slight_smile:

Obrigado pela ajuda.

Criado 30 de outubro de 2013
Ultima resposta 5 de nov. de 2013
Respostas 10
Participantes 2