Como logar o stacktrace com o Log4j? [RESOLVIDO]

Fala galera, blz?

Seguinte estou começando a usar o Log4j e eu não estou conseguindo de jeito nenhum fazer com que ele jogue o stacktrace no log! Alguem pode me ajudar? Valeu!

eu faço assim:

[code]
try {
//Aqui vai a açao q pode gerar excessao
} catch (Exception e) {
err("Escreva nome da classe, metodo sei la " + e.toString());
}

    private static Logger getLogger() {
	return UtilLogger.getLogger(NomeDestaClasse.class);
}


/**
 * @param stkTrace
 */
protected void dbg(Object stkTrace) {
	getLogger().debug(stkTrace);
}

/**
 * @param stkTrace
 */
protected static void inf(Object stkTrace) {
	getLogger().info(stkTrace);
}

protected static void err(Object stkTrace) {
	getLogger().error(stkTrace);
}[/code]

Faltou o código da minha UtilLogger

[code]
public class UtilLogger {

/**
 * Object for logging
 */
private static Logger logger = null;

/*
 * Cria um novo FileAppender baseado no layout padrão, pré-definido na
 * constante TTCC_CONVERSION_PATTERN da classe PatternLayout.
 */
private static Appender fileAppender = null;

protected static Appender getFileAppender() {
	if (fileAppender == null) {
		try {
			//log4j.appender.output.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} - (%p) - [%c{1}] %m%n
			//PatternLayout.TTCC_CONVERSION_PATTERN
			fileAppender = new FileAppender(new PatternLayout(
					"%d{dd-MM-yyyy HH:mm:ss} - (%p) - [%c{1}] %m%n"),
					"NomeDaSuaAplicacao.log");
		} catch (IOException e) {
			//
		}
	}
	return fileAppender;
}

public static Logger getLogger(Class classe) {
	//if (logger == null) {
	PropertyConfigurator.configure("ConfigLog.properties");

	logger = Logger.getLogger(classe);
	//logger.addAppender(getFileAppender());
	//}
	return logger;
}

}[/code]

E do meu ConfigLog.properties

# root logger properties
log4j.rootLogger=DEBUG, output

#Setup output appender
#log4j.appender.output=org.apache.log4j.FileAppender
#log4j.appender.output.file=NomeDaSuaAplicacao.log
log4j.appender.output =org.apache.log4j.ConsoleAppender

log4j.appender.output.layout=org.apache.log4j.PatternLayout

log4j.appender.output.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} - (%p) - [%c{1}] %m%n

Então eu fiz do jeito que você falou.
Estou logando emum arquivo e o resultado foi este:
"11/08/2006 11:11:55,336 ERROR [Principal] java.sql.SQLException: ORA-00942: a tabela ou view não existe "

Ai no console do eclipse aparece assim:
"java.sql.SQLException: ORA-00942: a tabela ou view não existe

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:790)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:830)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1133)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1273)
at br.com.gsp.main.Principal.main(Principal.java:30)"

O que eu quero é justamente que apareca todo o stack trace = o eclipse faz mas isso eu não estou conseguindo fazer!

Valeuuu!

Oi sic,

Tudo bom?

Tente utilizar o método trace da classe Logger. Espero que sirva pra você.

[]s
Eduardo

} catch (Exception e) { err("Escreva nome da classe, metodo sei la " + e.toString()); }

neste trecho tente usar e.getStackTrace().toString()

nao posso testar agora pq to com outro problema aqui, mas tente aí e me fala.

Testei essa última idéia e funcionou… pode fazer aí q vai dar certo.

Putz cara não é possivel!!!
Segue o trecho de código:
} catch(SQLException e){
log.error(e.getStackTrace().toString());
e.printStackTrace();
}

O resultado no arquivo é:
11/08/2006 13:48:59,440 ERROR [Principal] [Ljava.lang.StackTraceElement;@111a775

Não é possível, tipo tem que fazer alguma configuração especial?

Valeu

ESB valeu pela dica :-). Olhando os métodos do link que você passou eu vi o seguinte método:
public boolean isTraceEnabled()

pelo que eu entendi isso verifica se o nível de TRACE está disponível, eu fiz um teste e retornou false. Como setar isso para true?

Vlw

Falae sic,

Tente usar:

logger.setLevel(Level.TRACE);

Mas na documentação diz que os níveis de log aceitos pelo sistema são OFF, FATAL, ERROR, WARN, INFO, DEBUG e ALL. Se não funcionar com a definição desse nível, tente usar o método trace, que recebe a exception como parâmetro.

[]s
Eduardo

Fala esb,

então fiz o setLevel(Level.TRACE)

e quando pego a exception estou fazendo assim:
} catch(SQLException e){
log.trace(e);
}

e no log aparece só isso:
11/08/2006 14:45:06,976 TRACE [Principal] java.sql.SQLException: ORA-00942: a tabela ou view não existe

Agradeço a ajuda do esb e do Tiago, valeu rapaziada.

Então fica assim:
log.error(e.getMessage(), e);
onde “e” é exception que foi capturada.

Abraços galera

Desse jeito q vc fez por ultimo deu certo?
Se sim, parabens! Espero ter ajudado em algo.

Precisando, tô aí.

Ah, e coloca [RESOLVIDO] no final do nome do assunto agora hheeh.

Bye

Fala Tiago,

então assim do jeito que eu falei deu certo sim cara e você ajudou sim com ctz valeu mesmo.

PS: Como que eu faço para que o [RESOLVIDO] apareça lá no índice do forum?

Abraços

Acho q é só vc editar o Assunto do tópico… Nao tenho certeza…

Hahahaha fala Tiago, descobri como faz hahaah tem que editar o primeiro post hehehe ai fica aparecendo no índice do fórum :-D. Valeu rapa abs.

Oi cara !
Achei este teu topico e resolvi aproveitar pra te fazer uma pergunta.
Estou usando o log4j-1.2.8, mas quando vou gravar a mensagem no banco de dados, ele grava só o comecinho dela… num grava o stacktrace. Vc sabe porque isso acontece ? Segue meu .properties

log4j.rootCategory= WARN, R

log4j.appender.R=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.R.driver=oracle.jdbc.OracleDriver
log4j.appender.R.URL=jdbc:oracle:thin:@192.168.0.138:1521:MOTO
log4j.appender.R.user=123
log4j.appender.R.password=456
log4j.appender.R.sql=INSERT INTO PPMOWN.OPMD_LOGS VALUES(’%d{dd/MM/yyyy HH:mm:ss}’,’%c’,’%p’,SubStr(’%m’, 0, 2048))
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %p [%c] - <%m>%n

Obrigado!