Logger.....[RESOLVIDO]

2 respostas
Guilherme_Gomes

Ola pessoal!

Nunca sei quando a duvida é basica ou avançada ^^ Vamos la. Eu fiz a classe a seguir:

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

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;


public class Log {
	static Logger logger;
	
	public static synchronized void log(String str, String color) {
		logger.info("<div style=\"background-color: #" + color + ";\">" + str + "</div>");
	}
	
	public static void init(){
		File file = new File("C://logger" + new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()) + ".html");
		if(logger != null && file.exists()){
			System.out.println("inicializado de novo...");
			return;
		}
		try{
			logger = null;
			logger = Logger.getLogger(Log.class);
			logger.setLevel(Level.INFO);
			String nome = "C://logger" + new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()) + ".html";
			Appender fileAppender = new FileAppender(
					new PatternLayout("%m%n"), 
					nome);
			logger.addAppender(fileAppender);
			System.out.println("criado: " + nome);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

Apenas para fazer um teste. Chamo a função init varias vezes no meu programa, de 3 em 3 segundos. Mas estou com um problema, pois não consigo desreferenciar os arquivos anteriores, por exemplo,

Eu quero que nos 3 primeiros segundos ele mande as informações para o blablabla2007-09-06 13-42-40.log
e depois de 3 segundos ele irá para o arquivo blablabla2007-09-06 13-42-43.log
e assim por diante. Sendo que, de 3 em 3 segundos eu estou chamando o método init()

O problema é que só deve escrever no log atual (dos atuais 3 segundos), mas ele sempre está escrevendo no atual e nos últimos criados. Alguem pode me ajudar em como desreferenciar os antigos logs?

Obrigado,

2 Respostas

peron

Tente remover o appender anterior:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Category.html#removeAppender(org.apache.log4j.Appender)

edit:

ou melhor, remova todos os appenders e adicione o último:

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

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;


public class Log {
	static Logger logger;
	
	public static synchronized void log(String str, String color) {
		logger.info("<div style=\"background-color: #" + color + ";\">" + str + "</div>");
	}
	
	public static void init(){
		File file = new File("C://logger" + new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()) + ".html");
		if(logger != null && file.exists()){
			System.out.println("inicializado de novo...");
			return;
		}
		try{
			logger = null;
			logger = Logger.getLogger(Log.class);
			logger.setLevel(Level.INFO);
			String nome = "C://logger" + new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()) + ".html";
			Appender fileAppender = new FileAppender(
					new PatternLayout("%m%n"), 
					nome);
                        //aqui:
                        logger.removeAllAppenders();
                        //dsai adicione o arquivo
			logger.addAppender(fileAppender);
			System.out.println("criado: " + nome);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

sds

Guilherme_Gomes

Era isso que eu estava procurando… Obrigado!

Criado 6 de setembro de 2007
Ultima resposta 6 de set. de 2007
Respostas 2
Participantes 2