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?
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
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.
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
En utilisant log4j
vous pouvez enregistrer exceptiosn assez facilement:
try {
...
} catch(Exception e) {
log.error("An exception! Oops!", e);
}
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);
}