2010-06-01 5 views
19

J'essaie de supprimer la sortie de la ligne de date pendant la journalisation lorsque j'utilise le consignateur par défaut dans java.util.logging. Par exemple, voici une sortie typique:java.util.logging: comment supprimer la ligne de date

 
Jun 1, 2010 10:18:12 AM gamma.utility.application info 

INFO: ping: db-time=2010-06-01 10:18:12.0, local-time=20100601t101812, duration=180000
Jun 1, 2010 10:21:12 AM gamma.utility.application info
INFO: ping: db-time=2010-06-01 10:21:12.0, local-time=20100601t102112, duration=180000

Je voudrais vous débarrasser des lignes Jun 1, 2010..., ils encombrer juste ma sortie du journal. Comment puis-je faire ceci?

+0

Le format de sortie dépend du formateur utilisé. http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Formatter.html. Pouvez-vous préciser ce qui vous appartient et publier sa configuration? – Anton

+0

donnez vos fichiers .properties? – Bozho

+0

Anton, j'utilise java.util.logging.SimpleFormatter en jdk 1.6. J'ai essayé de créer un formateur simple et de surcharger sa méthode de formatage (LogRecord) mais cela n'a pas aidé. – andrewz

Répondre

12

Le problème est causé par un gestionnaire dans le journal parent. La solution consiste à supprimer tous les gestionnaires du journal parent, puis à ajouter un gestionnaire personnalisé. Ce code supprime les gestionnaires du journal parent:

 
     for(Handler iHandler:log.getParent().getHandlers()) 
     { 
     log.getParent().removeHandler(iHandler); 
     } 
+6

à la place 'log.setUseParentHandlers (false);' peut également être utilisé –

5

Ecrivez un formateur personnalisé qui étend la classe java.util.logging.Formatter et implémente la méthode String format(LogRecord) en fonction de vos besoins. Par exemple, le formatter suivant montre que le message du journal (et le stacktrace throwable si une exception est en cours d'enregistrement):

import java.io.PrintWriter; 
import java.io.StringWriter; 
import java.util.logging.Formatter; 
import java.util.logging.LogRecord; 

class CustomRecordFormatter extends Formatter { 
    @Override 
    public String format(final LogRecord r) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(formatMessage(r)).append(System.getProperty("line.separator")); 
     if (null != r.getThrown()) { 
      sb.append("Throwable occurred: "); //$NON-NLS-1$ 
      Throwable t = r.getThrown(); 
      PrintWriter pw = null; 
      try { 
       StringWriter sw = new StringWriter(); 
       pw = new PrintWriter(sw); 
       t.printStackTrace(pw); 
       sb.append(sw.toString()); 
      } finally { 
       if (pw != null) { 
        try { 
         pw.close(); 
        } catch (Exception e) { 
         // ignore 
        } 
       } 
      } 
     } 
     return sb.toString(); 
    } 
} 

Voici comment l'utiliser:

import java.util.logging.ConsoleHandler; 
import java.util.logging.Logger; 

class A { 
    private static final Logger LOGGER = Logger.getLogger(A.class.getName()); 

    static { 
     CustomRecordFormatter formatter = new CustomRecordFormatter(); 
     ConsoleHandler consoleHandler = new ConsoleHandler(); 
     consoleHandler.setFormatter(formatter); 
     LOGGER.addHandler(consoleHandler); 
    } 

    public void doSomething() { 
     LOGGER.info("something happened"); 
    } 
} 
+0

Je vais essayer, mais quand j'ai essayé quelque chose de similaire la dernière fois il didn ne fonctionne pas. – andrewz

+0

Besoin de suivre la réponse de Andrew ci-dessous en plus de cela :) –

+0

Formatter est final. –

31

de Java SE 7, une nouvelle propriété système: java.util.logging.SimpleFormatter.format.

La même propriété est également configurable dans le fichier de propriétés java.util.logging (logging.properties). Si vous êtes un utilisateur Eclipse, et vous êtes agacé par le message double ligne dans la sortie de la console, vous pouvez changer le fichier logging.properties jre (JDK_HOME/jre/lib/logging.properties) de cette manière:

java.util.logging.SimpleFormatter.format =% 4 $ s:% 5 $ s [% 1 $ tc]% n

Certains format exemple est disponible ici: http://docs.oracle.com/javase/7/docs/api/index.html?java/util/logging/SimpleFormatter.html.

+1

existe-t-il une solution de contournement pour Java 6? –

+1

Vous venez d'enregistrer notre journée, merci mon pote. Pour l'anecdote, si vous utilisez Tomcat, vous pouvez également changer cela sous /etc/tomcat/logging.properties, vous n'avez pas besoin de changer les paramètres Java globaux. – bviktor

+0

Si vous voulez faire cela par programme, voir la réponse ici: https://stackoverflow.com/questions/194765/how-do-i-get-java-logging-output-to-appear-on-a-single-line –

Questions connexes