AntLogHandler.java
01 /**
02  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
03  */
04 package net.sourceforge.pmd.util.log;
05 
06 import java.io.PrintWriter;
07 import java.io.StringWriter;
08 import java.util.logging.Formatter;
09 import java.util.logging.Handler;
10 import java.util.logging.Level;
11 import java.util.logging.LogRecord;
12 
13 
14 import org.apache.tools.ant.Project;
15 import org.apache.tools.ant.Task;
16 
17 /**
18  * AntLogHandler sends log messages to an Ant Task, so the regular Ant logging
19  * is used.
20  
21  @author Wouter Zelle
22  */
23 public class AntLogHandler extends Handler {
24     private Task antTask;
25 
26     private static final Formatter FORMATTER = new PmdLogFormatter();
27 
28     public AntLogHandler(Task antTask) {
29         this.antTask = antTask;
30     }
31 
32     public void publish(LogRecord logRecord) {
33         //Map the log levels from java.util.logging to Ant
34         int antLevel;
35         Level level = logRecord.getLevel();
36         if (level == Level.FINEST) {
37             antLevel = Project.MSG_DEBUG;   //Shown when -debug is supplied to Ant
38         else if (level == Level.FINE || level == Level.FINER || level == Level.CONFIG) {
39             antLevel = Project.MSG_VERBOSE; //Shown when -verbose is supplied to Ant
40         else if (level == Level.INFO) {
41             antLevel = Project.MSG_INFO;    //Always shown
42         else if (level == Level.WARNING) {
43             antLevel = Project.MSG_WARN;    //Always shown
44         else if (level == Level.SEVERE) {
45             antLevel = Project.MSG_ERR;     //Always shown
46         else {
47             throw new IllegalStateException("Unknown logging level");   //shouldn't get ALL or NONE
48         }
49         
50         antTask.log(FORMATTER.format(logRecord), antLevel);
51         if (logRecord.getThrown() != null) {
52             StringWriter stringWriter = new StringWriter();
53             PrintWriter printWriter = new PrintWriter(stringWriter, true);
54             logRecord.getThrown().printStackTrace(printWriter);
55             antTask.log(stringWriter.toString(), antLevel);
56         }
57     }
58 
59     public void close() throws SecurityException {
60     }
61 
62     public void flush() {
63     }
64 }