Java inclúe na propia distribución, dentro do paquete java.util.logging, un conxunto de clases que nos serven para crear logs con formato personalizado de forma sinxela. Porén, esta libraría non é tan doada de usar. Nas seguintes seccións explícanse os diferentes “trucos” que é preciso coñecer para unha correcta utilización desta librería.
O seguinte código pon a saída do log no formato “nivel: mensaxe”, eliminando así a data e o método de chamada nas mensaxes do log.
handler.setFormatter(new Formatter() { @Override public String format(LogRecord lr) { StringBuffer buf = new StringBuffer(1000); buf.append(lr.getLevel()); buf.append(": "); buf.append(lr.getMessage(lr)); buf.append('\n'); return buf.toString(); } });
O log anónimo (“”) sempre existe, polo que se se quere obter un log mediante:
Logger.getLog("");
non o creará, senón que devolverá o xa existente. O problema reside en que este log xa ten por defecto como handler un ConsoleHandler e, ademais, este log é utilizado como pai de calquera log que se cree. Polo tanto, cando se inicializa un novo log (co nome diferente a “”), aínda que este non teña ningún handler asociado, por defecto reenvía as súas mensaxes ao log anónimo (“”). Como consecuencia, ao engadir un handler, as mensaxes do log imprimiranse dúas veces. Para solucionar isto, hai que evitar que se reenvíen as súas mensaxes a outros logs, mediante a seguinte función:
log.setUseParentHandlers(false);
Para que Level.All teña realmente efecto e se faga log de tódolos niveis, débese indicar en tódolos handlers dispoñibles do log o nivel requirido, así coma no propio log:
log.setLevel(Level.All); for (Handler h : log.getHandlers()) { h.setLevel(Level.All); }