log4j

quando utilizo o log, ao logar a primeira vez ele cria normalmente o arquivo e adiciona o log, porem quando logo novamente ele comeca a duplicar as minhas informacoes de log, sera que alguem pode me ajudar

Meu Codigo:

package br.fucapi.saa.componentes;

import java.util.GregorianCalendar;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;

import br.fucapi.saa.vo.SistemaVO;
import br.fucapi.saa.vo.UsuarioVO;

public class Log {

	private static Logger logger;
	
	/**
     * tipo: equivale ao tipo de mensagem, se erro, aviso, informacao ...<p>
     * dataAtual: pega a data em que pedido para gerar mais uma linha no log<p>
     * hora: pega a hora em que pedido para gerar mais uma linha no log<p>
     * sistema: deve ser a sigla ou nome do sistema<p>
     * tipoRotina: deve ser o tipo de rotina, consulta, inclusao, alteracao, exclusao<p>
     * Usuario: deve ser o login do usuario<p>
     * Rotina: deve ser a rotina utilizada pelo usuario<p>
     * IP: deve ser o IP da maquina do cliente<p>
     * mensagem: deve ser a mensagem 
     *
     */	
	
	private String usuario_login;
	private String sistema;
	private String ip;	
	private String rotina;
	
	private String tipo_rotina;
	private String mensagem;
	private String url;
	private Class classe;
	private UsuarioVO usuario;
	private SistemaVO sistemaVO;
	
	public static final String EXCLUIR = "E";
	public static final String INCLUIR = "I";
	public static final String CONSULTAR = "C";
	public static final String ALTERAR = "A";
	
	
	private static Appender fileAppender;
	
	public Log (Class classe, HttpServletRequest request){
		
		try {
			this.classe = classe;	
			usuario = (UsuarioVO)request.getSession().getAttribute("usuario");
			
			if (usuario == null){
				usuario_login = "null";
			}
			else{
				usuario_login = usuario.getUsu_login();	
			}
			
			
			sistemaVO = (SistemaVO)request.getSession().getAttribute("sistema");
			
			if (sistemaVO == null){
				sistema = "null";
			}
			else{
				sistema = sistemaVO.getSistema_cd();	
			}
			
			ip = request.getRemoteAddr();
			
			url = request.getRequestURI();
			
			logger = Logger.getLogger(classe.getName());	 
			
			PatternLayout a = new PatternLayout(PatternLayout.DEFAULT_CONVERSION_PATTERN);
			
			fileAppender = new FileAppender(
		            a,"/usr/local/java/jboss/server/default/log/pss"+getDataLog()+".log");
			logger.removeAllAppenders();
			logger.addAppender(fileAppender);
			logger.setLevel(Level.INFO);				
		}
		catch (Exception e){
			e.printStackTrace();
		}
		
	}
	
	/**
     * tipoRotina: deve ser o tipo de rotina, consulta, inclusao, alteracao, exclusao (Existe como variavel estatica na classe log)<p>
     * Rotina: deve ser o metodo utilizado pelo usuario<p>
     * mensagem: deve ser a mensagem
     */
	
	public void error(String tipoRotina, String rotina, String msg){		
		try {			
			iniciarLog(tipoRotina, rotina, msg);
			logger.info(toString("ERROR"));			
		}
		catch (Exception e){
			e.printStackTrace();
		}
	}

	/**
     * tipoRotina: deve ser o tipo de rotina, consulta, inclusao, alteracao, exclusao (Existe como variavel estatica na classe log)<p>
     * Rotina: deve ser o metodo utilizado pelo usuario<p>
     * mensagem: deve ser a mensagem
     */
	
	public void warn(String tipoRotina, String rotina, String msg){
		try {
			iniciarLog(tipoRotina, rotina, msg);
			logger.info(toString("WARN"));			
		}
		catch (Exception e){
			e.printStackTrace();
		}
	}
	
	/**
     * tipoRotina: deve ser o tipo de rotina, consulta, inclusao, alteracao, exclusao (Existe como variavel estatica na classe log)<p>
     * Rotina: deve ser o metodo utilizado pelo usuario<p>
     * mensagem: deve ser a mensagem
     */
	
	public void info(String tipoRotina, String rotina, String msg){		
		try {
			iniciarLog(tipoRotina, rotina, msg);
			logger.info(toString("INFO"));
		//	logger.shutdown();					
		}
		catch (Exception e){			
			e.printStackTrace();			
		}
		
	}
	
	private String toString(String tipo){
		String c = classe.getName();
		c = c.substring(c.lastIndexOf(".")+1) + ".";
		
		return tipo + "#" + getDataAtual() + "#" + getHoraAtual() + "#"  
		           + sistema + "#" + tipo_rotina + "#" + usuario_login + "#" + (c+rotina) + "#" + ip +"#" + url +"#"+mensagem;
	}

	private String getDataAtual() {
		GregorianCalendar d = new GregorianCalendar();
		int dd = d.get(GregorianCalendar.DATE);
		int mm = d.get(GregorianCalendar.MONTH) + 1;
		int aa = d.get(GregorianCalendar.YEAR);
		String dataAtual = (aa+"/") + (((mm < 10) ? "0" + mm : ""+mm) + "/") + ((dd < 10) ? "0" + dd : dd + ""); 
		return dataAtual;
	}

	private String getDataLog() {
		GregorianCalendar d = new GregorianCalendar();
		int dd = d.get(GregorianCalendar.DATE);
		int mm = d.get(GregorianCalendar.MONTH) + 1;
		int aa = d.get(GregorianCalendar.YEAR);
		String dataAtual = aa + ((mm < 10) ? "0" + mm : "" + mm );			 
		return dataAtual;
	}
	
	private String getHoraAtual() {
		GregorianCalendar hr = new GregorianCalendar();
		int hh = hr.get(GregorianCalendar.HOUR_OF_DAY);
		int min = hr.get(GregorianCalendar.MINUTE);
		int seg = hr.get(GregorianCalendar.SECOND);
		String horaAtual = ((hh < 10) ? "0" + hh + ":" : hh + ":");
		horaAtual += ((min < 10) ? "0" + min + ":" : min + ":");
		horaAtual += ((seg < 10) ? "0" + seg : seg + "");	
		return horaAtual;
	}
		
	private void iniciarLog(String tipoRotina, String rotina, String msg){
		this.tipo_rotina = tipoRotina;
		this.rotina = rotina;
		this.mensagem = msg;	
	}
	
	
	
	public void setSistema(String sistema) {
		this.sistema = sistema;
	}
	public void setUsuario_login(String usuario_login) {
		this.usuario_login = usuario_login;
	}
}

[color=“green”][size=“9”]*Editado para adicionar o BBCode ;)[/size][/color]

O que exatamente ele está duplicando? Tem como você postar um pedaço do log aqui para darmos uma olhada?

O que o sistema está fazendo não é simplesmente registrando a sua nova entrada? neste caso creio que os dados serão os mesmos, mas com hora diferente… Não é esse o caso?

[]'s

Estou com o mesmo problema!

Na primeira vez o log4j gera apenas uma linha de log. Nas próximas vezes ele vai duplicando as linhas:

1º Vez
63612 [DefaultQuartzScheduler_Worker-7] INFO br.com.teste.IntegraBean2 - Tue Oct 25 22:41:04 GMT-03:00 2011 PROCESSO ATUALIZADO COM SUCESSO: AER0002/11

5º vez
28851312 [DefaultQuartzScheduler_Worker-2] INFO br.com.teste.IntegraBean2 - Wed Oct 26 06:40:52 GMT-03:00 2011 PROCESSO ATUALIZADO COM SUCESSO: AER0002/11
28851312 [DefaultQuartzScheduler_Worker-2] INFO br.com.teste.IntegraBean2 - Wed Oct 26 06:40:52 GMT-03:00 2011 PROCESSO ATUALIZADO COM SUCESSO: AER0002/11
28851312 [DefaultQuartzScheduler_Worker-2] INFO br.com.teste.IntegraBean2 - Wed Oct 26 06:40:52 GMT-03:00 2011 PROCESSO ATUALIZADO COM SUCESSO: AER0002/11
28851312 [DefaultQuartzScheduler_Worker-2] INFO br.com.teste.IntegraBean2 - Wed Oct 26 06:40:52 GMT-03:00 2011 PROCESSO ATUALIZADO COM SUCESSO: AER0002/11
28851312 [DefaultQuartzScheduler_Worker-2] INFO br.com.teste.IntegraBean2 - Wed Oct 26 06:40:52 GMT-03:00 2011 PROCESSO ATUALIZADO COM SUCESSO: AER0002/11

Alguem sabe como resolver?