Fórum Log4J travando aplicação java #498070

16/10/2014

0

Olá pessoal,
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

Fernando Blomer

Responder

Post mais votado

21/10/2014

Ronaldo vi alguns artigos seus aqui na DevMedia e em especial um sobre o Log4J2

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

Ler Mais...



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

Ronaldo Lanhellas
Responder

Gostei + 1

Mais Posts

16/10/2014

Ronaldo Lanhellas

Bom, você pode tentar diminuir o tamanho do arquivo de log para "1024KB" em vez de 4MB, tente assim:

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.
Responder

Gostei + 0

16/10/2014

Fernando Blomer

Olá Ronaldo,
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.
Responder

Gostei + 0

16/10/2014

Ronaldo Lanhellas

Olá Ronaldo,
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');
}
Responder

Gostei + 0

16/10/2014

Fernando Blomer

Sim a aplicação possui vários pontos. Vou fazer o teste usando IF.
Responder

Gostei + 0

16/10/2014

Ronaldo Lanhellas

Sim a aplicação possui vários pontos. Vou fazer o teste usando IF.


ok, fico no aguardo.
Responder

Gostei + 0

17/10/2014

Fernando Blomer

Ronaldo o problema ainda persiste,
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?
Responder

Gostei + 0

17/10/2014

Ronaldo Lanhellas

Ronaldo o problema ainda persiste,
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?

Ler Mais...



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
Responder

Gostei + 0

17/10/2014

Fernando Blomer

Na verdade a aplicação para mesmo. não faz mais nda.

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.
Responder

Gostei + 0

19/10/2014

Ronaldo Lanhellas

Na verdade a aplicação para mesmo. não faz mais nda.

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.
Responder

Gostei + 0

19/10/2014

Ronaldo Lanhellas

Outra dica: na hora que seu sistema travar veja se algum processo está consumindo muita memória (comando TOP no linux)
Responder

Gostei + 0

21/10/2014

Fernando Blomer

Verifiquei a questão dos processos e está tudo normal.
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.
Responder

Gostei + 0

21/10/2014

Fernando Blomer

Ronaldo vi alguns artigos seus aqui na DevMedia e em especial um sobre o Log4J2

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar