2010-12-08 8 views
3

ich einen Logger in Java erschaffe durch den folgenden Code ausführen:Logging in Java

 

private static final String logFile = "." + File.separator + "Log Files" + File.separator + "Log_" + Long.toString(System.currentTimeMillis()); 
private static Logger logger = Logger.getLogger("JCS_Logger"); 
static 
{ 
    try 
    { 
     logger.addHandler(new FileHandler(logFile)); 
    } 
    catch (Exception e) 
    { 
     System.err.println("Could not return a static logger"); 
    } 
} 
 

Wenn ich diesen Logger zu verwenden, schreibt er nicht nur System.err, sondern auch in die Datei. Schließlich möchte ich den Logger konfigurieren, damit es schreiben:‘

  1. Beide System.err und Datei
  2. Weder System.err und Datei
  3. Gerade System.err
  4. Gerade
  5. Datei

Ich weiß, dass das Aufrufen von logger.setLevel(Level.OFF) die gesamte Protokollierung deaktiviert, aber ich bin nicht sicher, wie es für die obige Liste zu tun? Wird es durch die Level-Klasse gemacht? Irgendwelche Ideen oder Vorschläge würden sehr geschätzt werden.

EDIT: Vielen Dank für die Antworten. Ich löste es mit diesem Code:

 

    /** 
    * If debug should be turned on 
    */ 
    static boolean debug = true; 
    /** 
    * If writing debug to file 
    */ 
    static boolean writeLogToFile = false; 
    /** 
    * If writing debug to System.err 
    */ 
    static boolean writeLogToStdErr = true; 

    /** 
    * Location for the temp file 
    */ 
    private static final String logFile = "." + File.separator + "Log Files" + File.separator + "Log_" + Long.toString(System.currentTimeMillis()); 
    /** 
    * Instance of the logger 
    */ 
    private static Logger logger = Logger.getLogger("JCS_Logger"); 
    /** 
    * Handler for System.err 
    */ 
    private static Handler consoleHandler; 
    /** 
    * Handler for the log file 
    */ 
    private static Handler fileHandler; 

    static 
    { 
     try 
     { //if not debuggin at all   
      if(debug == false) 
      { 
       logger.setLevel(Level.OFF); 
      } 
      //if not writing to the file 
      if(writeLogToFile == true) 
      { 
       fileHandler = new FileHandler(BCApp.getLogFileHandlerPath()); 
       logger.addHandler(fileHandler); 
      } 
      //if not writing to System.err 
      if(writeLogToStdErr == false) 
      { 
       consoleHandler = logger.getParent().getHandlers()[0]; 
       logger.getParent().removeHandler(consoleHandler); 
      } 
     } 
     catch (Exception e) 
     { 
      System.err.println("Could not return a static logger"); 
     } 
    } 
 

Danke für die Hilfe

Antwort

2

Sie entweder Handler nur für die gewünschten Elemente hinzufügen können, so dass Sie Ihre Auswahl an Protokollierung Startzeit; oder Sie können alle Handler hinzufügen und jeden Handler über Protokollierungsschwellenwerte abstimmen.

Zum Einstellen einer Protokollschwelle des Handler, verwendet handler.setLevel(...);

Beachten Sie, dass bei der Inbetriebnahme eines Standard-Handler bereits konfiguriert ist. Möglicherweise müssen Sie diesen Handler programmgesteuert entfernen oder ihn so anpassen, dass er nichts behandelt, je nachdem, welche Art von Protokollhandler "behandelt" wird, die Sie implementieren möchten.

1

Siehe die API-Dokumentation für diese Klasse: Logger (Java Platform SE 6).

Sie können Handler über die removeHandler(Handler)-Methode entfernen. Wenn Sie beispielsweise nur an die Konsole ausgeben möchten, können Sie diese Methode aufrufen, um den FileHandler zu entfernen.

Es gibt auch andere Möglichkeiten. Sie könnten einen anderen Ansatz wählen und für jeden Handler Filter setzen, die Nachrichten verwerfen würden, die nicht ausgegeben werden sollen. Vielleicht spielen Sie mit der Formatierung herum.

+0

Danke, Ihre Antwort war ebenso hilfreich. – user489041

0

Sie hätten die gewünschte Konfiguration erreichen können, ohne Code zu schreiben. So geht's: Navigieren Sie zu dem Verzeichnis, in dem Java auf Ihrem System installiert ist.

  1. Zum jre/lib (oder jre \ lib in Windows) Unterverzeichnis, und suchen Sie die Datei "logging.properties". Sie können es erstellen, wenn es nicht existiert.

  2. Bearbeiten Sie die Zeile mit Inhalt "Handler =" TO

    -Für Beide System.err und -Für keines der beiden Systeme

    "handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler" 
    

    Datei.err und Datei

    Simply comment that line by adding # in the beginning of the line. 
    

    -Für Gerade System.err

    "handlers = java.util.logging.ConsoleHandler" 
    

    -Für Gerade Datei

    "handlers = java.util.logging.FileHandler" 
    

Fertig! Sie sind gut zu gehen und Logging zu starten :)