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
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
**Configuração do Log4j**
<?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
DOMConfigurator.configureAndWatch(path.getWatchdogLog4jFile().getAbsolutePath())
onde o path é meu arquivo de configurações que contem os caminhos dos outros arquivos
Ex:
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
<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:
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
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
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
<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
<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
DOMConfigurator.configureAndWatch(path.getWatchdogLog4jFile().getAbsolutePath())
onde o path é meu arquivo de configurações que contem os caminhos dos outros arquivos
Ex:
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 :)