Foro de elhacker.net

Programación => Java => Mensaje iniciado por: kinos en 5 Octubre 2009, 20:09 pm



Título: se guarda en algún directorio el log? utilizo java.util.logging.Logger
Publicado por: kinos en 5 Octubre 2009, 20:09 pm
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.


Título: Re: se guarda en algún directorio el log? utilizo java.util.logging.Logger
Publicado por: kinos en 5 Octubre 2009, 21:12 pm
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
  1. package milogger;
  2.  
  3. import java.io.*;
  4. import java.util.logging.Logger;
  5. import java.util.logging.Level;
  6. import java.util.logging.FileHandler;
  7. import java.util.logging.SimpleFormatter;
  8.  
  9. class Diccionario {
  10.  
  11.    private static final Logger LOGGER = Logger.getLogger("TestLog");
  12.    private static final int MAX = 100;
  13.    // diccionario de hasta MAX palabras
  14.    // ordenadas alfabéticamente
  15.    private String[] palabras = new String[MAX];
  16.    private static final int primera = 0;
  17.    private int ultima = -1;
  18.  
  19.    static {
  20.        try {
  21.            boolean append = true;
  22.            FileHandler fh = new FileHandler("TestLog.log", append);
  23.            //fh.setFormatter(new XMLFormatter());
  24.            fh.setFormatter(new SimpleFormatter());
  25.            LOGGER.addHandler(fh);
  26.        } catch (IOException e) {
  27.            e.printStackTrace();
  28.        }
  29.    }
  30.  
  31.    /**
  32.      * Carga el diccionario leyendo palabras de un fichero.
  33.      *
  34.      * @param fichero A razón de una palabra por línea.
  35.      */
  36.    Diccionario(String fichero) {
  37.        LOGGER.config("cargamos el diccionario con " + fichero);
  38.        try {
  39.            BufferedReader br = new BufferedReader(new FileReader(fichero));
  40.  
  41.            for (String linea = br.readLine(); linea != null; linea = br.readLine()) {
  42.                if (ultima >= MAX - 1) {
  43.                    continue;
  44.                } // no caben más palabras
  45.                palabras[++ultima] = linea;
  46.            }
  47.            LOGGER.config(ultima + 1 + " palabras");
  48.        } catch (Exception e) {
  49.            LOGGER.log(Level.SEVERE, "creacion: ", e);
  50.  
  51.            System.exit(1);
  52.        }
  53.    }
  54.  
  55.    private int busca(String p) {
  56.        LOGGER.info("comienza la busqueda de " + p);
  57.        int resultado = busca(p, primera, ultima);
  58.  
  59.        LOGGER.info("resultado de la busqueda: " + resultado);
  60.        return resultado;
  61.    }
  62.  
  63.    private int busca(String p, int a, int z) {
  64.        LOGGER.fine("busca entre " + palabras[a] + " y " + palabras[z]);
  65.        if (a <= z) {
  66.            int m = (a + z) / 2;
  67.  
  68.            LOGGER.finer("probamos con " + palabras[m]);
  69.            int donde = p.compareTo(palabras[m]);
  70.  
  71.            LOGGER.finer("donde= " + donde);
  72.            if (donde == 0) {
  73.                return m;
  74.            }
  75.            if (donde < 0) {
  76.                return busca(p, a, m - 1);
  77.            }
  78.            if (donde > 0) {
  79.                return busca(p, m + 1, z);
  80.            }
  81.        }
  82.        LOGGER.warning("no encontrado");
  83.        return -1;
  84.    }
  85.  
  86.    /**
  87.      * Programa principal.
  88.      *
  89.      * @param args diccionario palabra
  90.      */
  91.    public static void main(String[] args)
  92.            throws Exception {
  93.        //if (args.length != 2) {
  94.        //     System.err.println("uso: java Diccionario diccionario palabra");
  95.        //     System.exit(1);
  96.        //}
  97.  
  98.        Diccionario diccionario = new Diccionario("diccionario");
  99.        String palabra = "hipoglúcido";
  100.        int posicion = diccionario.busca(palabra);
  101.  
  102.        System.out.println(palabra + ": " + posicion);
  103.    }
  104. }
  105.