Fórum Log4J travando aplicação java #498070
16/10/2014
0
Estou desenvolvendo uma aplicação em Java e utilizo o Log4j na mesma, porem está ocorrendo um problema quando o log4j vai quebrar (gerar novo arquivo) o arquivo de log ele trava no veio da criação do log e o pior trava a aplicação toda.
As configurações que estou utilizando são:
Maven
1 2 3 4 5 | < dependency > < groupId >log4j</ groupId > < artifactId >log4j</ artifactId > < version >1.2.17</ version > </ dependency > |
**Configuração do Log4j**
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <? xml version = "1.0" encoding = "UTF-8" ?> < configuration debug = "true" > < appender name = "fileAppender" class = "org.apache.log4j.RollingFileAppender" > < param name = "append" value = "true" /> < param name = "file" value = "logs/agent.log" /> < param name = "maxFileSize" value = "4MB" /> < param name = "maxBackupIndex" value = "5" /> < layout class = "org.apache.log4j.PatternLayout" > < param name = "ConversionPattern" value = "[%t];%-5p;%d;%c;%m;%n" /> </ layout > </ appender > < root > < level value = "INFO" /> < appender-ref ref = "fileAppender" /> </ root > </ configuration > |
Se alguém tiver alguma ideia ou sugestão agradeço.

Fernando Blomer
Curtir tópico
+ 0Post mais votado
21/10/2014
como posso fazer para migar? Pois utilizo o DOMConfigurator que na versão 2 não existe correto?
Estou usando da seguinte maneira
1 | DOMConfigurator.configureAndWatch(path.getWatchdogLog4jFile().getAbsolutePath()) |
onde o path é meu arquivo de configurações que contem os caminhos dos outros arquivos
Ex:
1 2 3 4 5 6 7 8 9 | public File getWatchdogLog4jFile() { return new File(getConfigDir(), "log4j.watchdog.xml"); } [code] essa aplicação chama outra aplicação e fica monitorando. Na outra aplicação eu uso o Log4J da seguinte maneira [code] private static final Logger LOGGER = Logger.getLogger(ZeusApp.class); |
em toda a aplicação Zeus utilizo da maneira acima
Bom, no artigo que você encontrou sobre o log4j2 tem explicações sobre como o mesmo funciona e você tem que adaptar toda sua aplicação para esta nova forma, não é trivial por isso fica complicado de explicar passo a passo por aqui.
Ronaldo Lanhellas

Gostei + 1
Mais Posts
16/10/2014
Ronaldo Lanhellas
1 | < param name = "maxFileSize" value = "1024KB" /> |
Uso este valor como padrão e nunca tive esse problema de "travamento" na criação de um novo arquivo de log. Você pode checar também se o seu diretório onde será criado o log possui as permissões correta e não tem nenhum "impeditivo" para criação de novos arquivos.
Gostei + 0
16/10/2014
Fernando Blomer
já tentei alterar o tamanho dos arquivos para 100 KB, 1MB e até 50 MB e não resolveu.
O diretório tem permissão, já fiz testes rodando a aplicação por dias e ele funcionou corretamente gerando e substituindo arquivos de log, porem em algumas ocasiões ele trava.
O problema que estou enfrentando é justamente esse pq não tenho como prever quando ele vai travar, pois hora funciona e hora não funciona.
Gostei + 0
16/10/2014
Ronaldo Lanhellas
já tentei alterar o tamanho dos arquivos para 100 KB, 1MB e até 50 MB e não resolveu.
O diretório tem permissão, já fiz testes rodando a aplicação por dias e ele funcionou corretamente gerando e substituindo arquivos de log, porem em algumas ocasiões ele trava.
O problema que estou enfrentando é justamente esse pq não tenho como prever quando ele vai travar, pois hora funciona e hora não funciona.
Sua aplicação possui muito pontos com log4j ? É importante colocar um IF antes da utilização de cada debug, info ou etc. Veja:
1 2 3 | if (log4jObject.isDebugEnabled()){ log4jObject.debug('oi'); } |
Gostei + 0
16/10/2014
Fernando Blomer
Gostei + 0
16/10/2014
Ronaldo Lanhellas
ok, fico no aguardo.
Gostei + 0
17/10/2014
Fernando Blomer
vou implementar da seguinte maneira para ver se contorno o problema
1 2 3 4 5 6 7 | if (LOGGER.isInfoEnabled()){ try{ LOGGER.info("executing job: " + job.name()); } catch (Exception e) { // } } |
O que acha? desta forma a aplicação não irá travar correto?
Gostei + 0
17/10/2014
Ronaldo Lanhellas
vou implementar da seguinte maneira para ver se contorno o problema
1 2 3 4 5 6 7 | if (LOGGER.isInfoEnabled()){ try{ LOGGER.info("executing job: " + job.name()); } catch (Exception e) { // } } |
O que acha? desta forma a aplicação não irá travar correto?
Opa, mas o "travamento" que entendi foi uma pequena lentidão que ocorre e não uma Exceção, você não falou nisso. Se for o caso de ocorrer uma Exceção ai sim você terá que ver qual erro está ocorrendo
Gostei + 0
17/10/2014
Fernando Blomer
Hoje pela manhã mudei a configuração para o tamanho de arquivo que você falou
1 | < param name = "maxFileSize" value = "1024KB" /> |
Removi um monte de "lixo" que estava logando deixando apenas o que realmente é interessante para o processo e coloquei os if (LOGGER.isInfoEnabled()) e if (LOGGER.isDebugEnabled()) e vou deixar rodando o final de semana para ver se volta a dar problema.
Gostei + 0
19/10/2014
Ronaldo Lanhellas
Hoje pela manhã mudei a configuração para o tamanho de arquivo que você falou
1 | < param name = "maxFileSize" value = "1024KB" /> |
Removi um monte de "lixo" que estava logando deixando apenas o que realmente é interessante para o processo e coloquei os if (LOGGER.isInfoEnabled()) e if (LOGGER.isDebugEnabled()) e vou deixar rodando o final de semana para ver se volta a dar problema.
Se for possível, faça um teste rodando o servidor de aplicação em uma outra máquina e veja se o erro continua. Pode ser alguma configuração do Sistema Operacional ou algum processo que está "bloqueando" a escrita do arquivo de log.
Gostei + 0
19/10/2014
Ronaldo Lanhellas
Gostei + 0
21/10/2014
Fernando Blomer
Acho que descobri onde está o problema, porem não consegui resolver ainda.
Um dos problemas com relação ao Log4j é que quando ele faz muito "rolling" de arquivo, trocando o arquivo.log->arquivo.1.log, arquivo.1.log->arquivo.2.log, etc, ele está se perdendo e travando a aplicação.
Gostei + 0
21/10/2014
Fernando Blomer
como posso fazer para migar? Pois utilizo o DOMConfigurator que na versão 2 não existe correto?
Estou usando da seguinte maneira
1 | DOMConfigurator.configureAndWatch(path.getWatchdogLog4jFile().getAbsolutePath()) |
onde o path é meu arquivo de configurações que contem os caminhos dos outros arquivos
Ex:
1 2 3 4 5 6 7 8 9 | public File getWatchdogLog4jFile() { return new File(getConfigDir(), "log4j.watchdog.xml"); } [code] essa aplicação chama outra aplicação e fica monitorando. Na outra aplicação eu uso o Log4J da seguinte maneira [code] private static final Logger LOGGER = Logger.getLogger(ZeusApp.class); |
em toda a aplicação Zeus utilizo da maneira acima
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)