Comment écrire un journal d'erreur ou une exception dans un fichier en java


Existe-t-il un moyen d'écrire un journal d'erreur ou une exception dans un fichier en java. j'ai parcouru Log4j. J'ai googlé à ce sujet mais je n'ai pas trouvé de bonne solution. J'ai écrit un code simple

catch (Exception e) {
    PrintWriter pw = new PrintWriter(new FileOutputStream("Log"));     
    e.printStackTrace(pw);
} 

Existe-t-il un autre moyen de consigner les erreurs ou les exceptions? un corps peut-il me fournir un exemple d'exemple de Log4j?

Author: Ashish Aggarwal, 2012-02-20

5 answers

Lisez d'abord Le manuel log4j, il est facile de configurer un fichier journal roulant. Vous n'avez pas à effectuer d'opérations de fichier explicites.

#SET LEVEL of ROOT-LOGGER, you will like to have Debug in local, but in prod you may just want WARN and ABOVE. This setting is done here!
log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number. (basically, format of log)
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

# THIS IS WHERE YOU WILL HAVE ALL THE LOG WRITTEN
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=/var/log/applogs/example.log

# Maximum size of log file, usually we keep 10MB
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file, usually we keep 10
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Deuxièmement, chaque fois que vous attrapez une exception, faites comme ceci

public class MyClass{

  private static Logger logger = Logger.getLogger(MyClass.class);

  public ReturnType myMethod(Param p, Param2 p2) {
    ....
    ....
    try {
      ..    
    } catch(MyException e) {
       logger.log("Exceptions happen!", e); //this will put all the details in log file configured earlier
    }
    ....
  }

  ....
}

Il vaut la peine de lire le manuel. Même mieux de lire Complète log4j Manuel

 23
Author: Nishant, 2016-04-12 11:52:46

Vous pouvez ajouter l'exception en tant que paramètre à votre instruction log4j, par exemple

catch(Exception e)
{
    logger.error("Unexpected error", e);
}

Si vous avez un appender de fichier en cours d'exécution OK, cela affichera la trace de pile complète de l'exception.

 4
Author: Brian, 2012-02-20 14:19:34
try {
       System.setErr(new PrintStream(new FileOutputStream(System.getProperty("user.home")+"/error.log")));
} catch (FileNotFoundException ex) {
        ex.printStackTrace();
}

Maintenant, toutes les sorties d'erreur sont écrites dans ce fichier

 4
Author: Thargor, 2016-04-12 11:53:07

En utilisant log4j vous pouvez enregistrer exceptiosn assez facilement:

try {
    ...
} catch(Exception e) {
    log.error("An exception! Oops!", e);
}
 3
Author: , 2012-02-20 14:18:07

Regardez ce tutoriel sur "Fichier Appender"

Voir introduction officielle de Log4j et la section "Configuration".

Vous pouvez également effectuer une recherche sur "RollingFileAppender" ou "File appender".

Vous configurez votre logger pour envoyer son message à un appender. Cet appender peut transférer un message vers la console (stdin), vers un fichier (FileAppender, RollingFileAppender...)...

Utilisez ceci pour effectuer le journal des erreurs:

try{
    throw new Exception("bla bla bla...");
} catch( Exception e ){
     // log without stack trace
     mLogger.error("Your log message");

     // log with stack trace
     mLogger.error("Your log message", e);
}
 1
Author: Sly, 2012-02-20 14:25:03