miércoles, 20 de agosto de 2008

Crear archivos logs desde Java

Esta vez se me metio en la cabeza que el sistema que estaba desarrollando para la Universidad debía tener archivos de registro, ya sea de error, información o algun warning del sistema.

Buscando por google encontre que se puede utilizar una libreria creada por Apache Software que se llama log4j pero el problema estaba en que todos los ejemplos que salian mandaban a crear un archivo properties donde se tenía que establecer el archivo a usar, entonces, en vista que se tendría que hacer un properties para cada caso pense que seria mejor mandar a llamarlo desde la clase.

Para no hacerlo más largo, me hice un mandrake violento, jejeje, para que funcionara de la forma que yo quería, que era estableciendo el archivo desde la clase.

Aqui dejo el ejemplo de archivo log



Se crea antes el archivo si no devolverá un error, para crear el archivo desde java es otro cuento, ya lo hice pero lo pondre en otro post, al igual que la explicación de esta clase.

Si te sirvió dejame tu comentario.

5 comentarios:

fher dijo...

Excelente el aporte, muchas gracias en serio, sin embargo me gustaría saber de la explicación que dices pq me urge muchísimo esto del Log !!

espero podamos entrar en contacto !!

Mil Gracias !!

mi correo es faraya89@hotmail.com por si me lo puedes enviar al correo o como te quede mejor !!

Bye

Dulce rayo de luna. dijo...

Hola=) me gustaria saber si llegaste a publicar como crear el archivo .log. porque he estado intentando creerlo y no me permite hacerlo.! ojala puedas ayudarme =D.. supuestamente asi deberia crearse el archivo:

File archivo = new File(System.getProperty("user.dir")+File.separator+fecha.toString().trim()+".log");

archivo.createNewFile();

pero me sale este error:
java.io.IOException: El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos

.u.u

Anónimo dijo...

Dulce rayo de luna... el problema esta en... que no puedes poner solo "new" asi como asi...
cuando escribes "new" estas diciendo al constructor que te haga un "nuevo" lo que sea... en este archivo... pero no lo hace en el hdd, si no en memoria, el concepto es abstracto, en el fondo lo que le debes decir es

File archivo = new File(aqui tiene que ir la ruta del archivo y el nombre en formato string);
archivo.createNewFile();

Anónimo dijo...

el problema... dulce, que ya me he dado cuenta... es que... el nombre que le escribes de archivo es incorrecto, xke esta sin cerrar el parentesis, sin punto y coma y ademas despues de fecha no debe haber punto, suponiendo que sea una variable, si es un metodo... no se lo que le habras puesto tu a ese metodo...

cahosoft dijo...

excelente, lo máximo... gracias...
cambie unas cosillas....
public class logger
{
String logfile = "C:\\tmp\\archivo.log";
Date fecha=new Date();
public logger(Logger log ) throws IOException
{
//log = Logger.getLogger(logger.class);
SimpleDateFormat formato = new SimpleDateFormat("dd.MM.yyyy");
String fechaAc = formato.format(fecha);
System.out.println(fechaAc);
PatternLayout defaultLayout = new PatternLayout("%p %c,line %L,%d{dd.MM.yyyy/HH:mm:ss},%m%n");
RollingFileAppender rollingFileAppender = new RollingFileAppender();
rollingFileAppender.setFile("C:\\tmp\\archivo_"+fechaAc+".log", true, false, 0);
rollingFileAppender.setMaxFileSize("1024MB");
//rollingFileAppender.setMaxBackupIndex(5);
rollingFileAppender.setLayout(defaultLayout);
log.removeAllAppenders();
log.addAppender(rollingFileAppender);
log.setAdditivity(false);
}
}


y puse esto en todos mis try
catch (Exception e)
{
Logger log = Logger.getLogger(this.getClass());
log.info("Message: "+e.toString() );
try {
new logger(log);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}