Java : loguer les exceptions avec un stacktrace

Boris HUISGEN
|
La journalisation des exceptions est impérative à la détection, l’analyse et la correction des bugs d’une application, ce quelque soit son environnement d’exécution. Cet article présente le code nécessaire à une application Java.
L’ajout de cette fonctionnalité s’appuie sur l’API java.util.logging :
1private final static Logger m_logger = Logger.getLogger ("package.MyClass");
2
3try
4{
5 // … code …
6}
7catch (Exception exception)
8{
9 StringBuilder stackTrace = new StringBuilder ("exception during execution: " +
10 exception.getMessage ());
11
12 for (StackTraceElement element : exception.getStackTrace ())
13 {
14 stackTrace.append ("\n\tat " + element.getClassName ()
15 + ":" + element.getMethodName () + "("
16 + element.getFileName () + ":"
17 + element.getLineNumber () + ")");
18 }
19
20 m_logger.log (Level.SEVERE, stackTrace.toString ());
21}
La sortie console informe l’ensemble des informations du stacktrace :
2 mai 2009 18:51:26 fr.hbis.ircs.Client parse
GRAVE: exception during command execution 'JOIN': fr.hbis.ircs.Channel.create(Ljava/lang/String;
Ljava/lang/String;)Lfr/hbis/ircs/Channel;
at fr.hbis.ircs.commands.Join:doCommand(Join.java:130)
at fr.hbis.ircs.commands.Join:execute(Join.java:64)
at fr.hbis.ircs.Client:parse(Client.java:158)
at fr.hbis.ircs.Client:read(Client.java:127)
at fr.hbis.ircs.nio.MessageTask:doProcess(MessageTask.java:253)
at fr.hbis.ircs.nio.MessageTask:doRead(MessageTask.java:197)
at fr.hbis.ircs.nio.MessageTask:doTask(MessageTask.java:152)
at fr.hbis.ircs.lib.nio.task.TaskBase:run(TaskBase.java:102)
at java.util.concurrent.ThreadPoolExecutor$Worker:runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker:run(ThreadPoolExecutor.java:907)
at fr.hbis.ircs.lib.nio.worker.DefaultWorkerThread:run(DefaultWorkerThread.java:123)