2010-12-08 3 views
3

Je crée un enregistreur en Java en exécutant le code suivant:Exploitation forestière en 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"); 
    } 
} 
 

Si j'utilise cet enregistreur, il écrit non seulement System.err, mais aussi dans le fichier. En fin de compte, je veux configurer l'enregistreur pour lui permettre d'écrire à: »

  1. deux System.err et le fichier
  2. Ni System.err et le fichier
  3. Juste System.err
  4. Tout fichier

Je sais que l'appel logger.setLevel(Level.OFF) va désactiver toute la journalisation, mais je ne suis pas sûr de savoir comment le faire pour la liste ci-dessus? Est-ce fait à travers la classe Level? Toute idée ou suggestion serait grandement appréciée.

EDIT: Merci pour les réponses. Je l'ai résolu avec ce 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"); 
     } 
    } 
 

Merci pour l'aide

Répondre

2

Vous pouvez ajouter des gestionnaires uniquement pour les éléments recherchés, de faire votre choix au moment de l'enregistrement de démarrage; ou, vous pouvez ajouter tous les gestionnaires et ajuster chaque gestionnaire via des seuils de consignation.

Pour régler le seuil d'enregistrement d'un gestionnaire, utilisez handler.setLevel(...);

Notez que le démarrage d'un gestionnaire par défaut est déjà configuré. Vous devrez peut-être supprimer ce gestionnaire par programmation ou l'accorder pour ne rien gérer, selon la technique de "gestion" du gestionnaire de journaux que vous souhaitez implémenter.

1

Voir la documentation de l'API pour cette classe: Logger (Java Platform SE 6).

Vous pouvez supprimer des gestionnaires via la méthode removeHandler(Handler). Par exemple, si vous souhaitez uniquement exporter vers la console, vous pouvez appeler cette méthode pour supprimer FileHandler.

Il existe également d'autres moyens. Vous pouvez adopter une approche différente et définir des filtres pour chaque gestionnaire, ce qui annulera les messages qui ne sont pas censés être émis. Peut-être jouer avec le formatage.

+0

Merci, votre réponse a été tout aussi utile. – user489041

0

Vous auriez pu obtenir la configuration souhaitée sans même écrire de code. Voici comment: Naviguez jusqu'au répertoire où Java est installé sur votre système.

  1. Aller au jre/lib (ou jre \ lib dans les fenêtres) sous-répertoire et recherchez le fichier "logging.properties". Vous pouvez le créer s'il n'existe pas.

  2. Modifier la ligne dont le contenu est "handlers =" TO

    -Pour deux System.err et File

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

    -Pour Ni système.err et fichier

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

    -Pour juste System.err

    "handlers = java.util.logging.ConsoleHandler" 
    

    -Pour juste fichier

    "handlers = java.util.logging.FileHandler" 
    

Terminé! Vous êtes bon pour aller et commencer à se connecter :)

Questions connexes