se guarda en algún directorio el log? utilizo java.util.logging.Logger

Iniciado por kinos, 5 Octubre 2009, 20:09 PM

0 Miembros y 1 Visitante están viendo este tema.

kinos

Hola:

Estoy aprendiendo sobre la clase Logger para incorporarla a mi código y tengo varias dudas.

¿Los mensajes se escriben solo en pantalla?
¿van a parar a algún archivo en la estructura de directorios de mi programa? (esta es mi intención para mas tarde poder depurarlo si surgen errores)

Estoy siguiendo los pasos que se indican en estos apuntes:

http://www.lab.dit.upm.es/~lprg/material/apuntes/log/log.htm

Gracias.

kinos

Basta que pregunte para dar con la solución:

- Los mensajes se pueden dirigir a un archivo, sólo hay que añadir al LOGGER un handler.

boolean append = true;
FileHandler fh = new FileHandler("TestLog.log", append);
fh.setFormatter(new SimpleFormatter());
LOGGER.addHandler(fh);

He hecho alguna modificación en el código que se expone en la web del link de dichos apuntes para hacer pruebas. Sólo tendrías que añadir al directorio del programa el archivo diccionario con palabras para que pueda cargarse (está en la web).

Código (java) [Seleccionar]

package milogger;

import java.io.*;
import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.FileHandler;
import java.util.logging.SimpleFormatter;

class Diccionario {

    private static final Logger LOGGER = Logger.getLogger("TestLog");
    private static final int MAX = 100;
    // diccionario de hasta MAX palabras
    // ordenadas alfabéticamente
    private String[] palabras = new String[MAX];
    private static final int primera = 0;
    private int ultima = -1;

    static {
        try {
            boolean append = true;
            FileHandler fh = new FileHandler("TestLog.log", append);
            //fh.setFormatter(new XMLFormatter());
            fh.setFormatter(new SimpleFormatter());
            LOGGER.addHandler(fh);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Carga el diccionario leyendo palabras de un fichero.
     *
     * @param fichero A razón de una palabra por línea.
     */
    Diccionario(String fichero) {
        LOGGER.config("cargamos el diccionario con " + fichero);
        try {
            BufferedReader br = new BufferedReader(new FileReader(fichero));

            for (String linea = br.readLine(); linea != null; linea = br.readLine()) {
                if (ultima >= MAX - 1) {
                    continue;
                } // no caben más palabras
                palabras[++ultima] = linea;
            }
            LOGGER.config(ultima + 1 + " palabras");
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE, "creacion: ", e);

            System.exit(1);
        }
    }

    private int busca(String p) {
        LOGGER.info("comienza la busqueda de " + p);
        int resultado = busca(p, primera, ultima);

        LOGGER.info("resultado de la busqueda: " + resultado);
        return resultado;
    }

    private int busca(String p, int a, int z) {
        LOGGER.fine("busca entre " + palabras[a] + " y " + palabras[z]);
        if (a <= z) {
            int m = (a + z) / 2;

            LOGGER.finer("probamos con " + palabras[m]);
            int donde = p.compareTo(palabras[m]);

            LOGGER.finer("donde= " + donde);
            if (donde == 0) {
                return m;
            }
            if (donde < 0) {
                return busca(p, a, m - 1);
            }
            if (donde > 0) {
                return busca(p, m + 1, z);
            }
        }
        LOGGER.warning("no encontrado");
        return -1;
    }

    /**
     * Programa principal.
     *
     * @param args diccionario palabra
     */
    public static void main(String[] args)
            throws Exception {
        //if (args.length != 2) {
        //     System.err.println("uso: java Diccionario diccionario palabra");
        //     System.exit(1);
        //}

        Diccionario diccionario = new Diccionario("diccionario");
        String palabra = "hipoglúcido";
        int posicion = diccionario.busca(palabra);
       
        System.out.println(palabra + ": " + posicion);
    }
}