1 package org.codehaus.mojo.jaxb2.shared.environment.logging;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.plugin.logging.Log;
23 import org.codehaus.mojo.jaxb2.shared.Validate;
24
25 import java.io.UnsupportedEncodingException;
26 import java.util.Arrays;
27 import java.util.List;
28 import java.util.logging.Filter;
29 import java.util.logging.Handler;
30 import java.util.logging.Level;
31 import java.util.logging.LogRecord;
32 import java.util.logging.SimpleFormatter;
33
34
35
36
37
38
39
40
41
42 public class MavenLogHandler extends Handler {
43
44
45 private Log log;
46 private String prefix;
47
48
49
50
51
52
53
54
55
56
57 public MavenLogHandler(final Log log,
58 final String prefix,
59 final String encoding,
60 final String[] acceptedLogRecordPrefixes) {
61
62
63 Validate.notNull(log, "log");
64 Validate.notNull(prefix, "prefix");
65 Validate.notEmpty(encoding, "encoding");
66
67
68 this.log = log;
69 this.prefix = prefix.isEmpty() ? "" : "[" + prefix + "]: ";
70
71 setFormatter(new SimpleFormatter());
72 setLevel(getJavaUtilLoggingLevelFor(log));
73 try {
74 setEncoding(encoding);
75 } catch (UnsupportedEncodingException e) {
76 log.error("Could not use encoding '" + encoding + "'", e);
77 }
78
79 if (acceptedLogRecordPrefixes != null && acceptedLogRecordPrefixes.length > 0) {
80 setFilter(getLoggingFilter(acceptedLogRecordPrefixes));
81 }
82 }
83
84
85
86
87 @Override
88 public void publish(final LogRecord record) {
89
90 if (this.isLoggable(record)) {
91
92 final Level level = record.getLevel();
93 final String message = prefix + getFormatter().format(record);
94
95 if (Level.SEVERE.equals(level)) {
96 log.error(message);
97 } else if (Level.WARNING.equals(level)) {
98 log.warn(message);
99 } else if (Level.INFO.equals(level)) {
100 log.info(message);
101 } else {
102 log.debug(message);
103 }
104 }
105 }
106
107
108
109
110 @Override
111 public void flush() {
112
113 }
114
115
116
117
118 @Override
119 public void close() throws SecurityException {
120
121 }
122
123
124
125
126
127
128
129 public static Level getJavaUtilLoggingLevelFor(final Log mavenLog) {
130
131
132 Validate.notNull(mavenLog, "mavenLog");
133
134 Level toReturn = Level.SEVERE;
135
136 if (mavenLog.isDebugEnabled()) {
137 toReturn = Level.FINER;
138 } else if (mavenLog.isInfoEnabled()) {
139 toReturn = Level.INFO;
140 } else if (mavenLog.isWarnEnabled()) {
141 toReturn = Level.WARNING;
142 }
143
144
145 return toReturn;
146 }
147
148
149
150
151
152
153
154
155
156 public static Filter getLoggingFilter(final String... requiredPrefixes) {
157
158
159 Validate.notNull(requiredPrefixes, "requiredPrefixes");
160
161
162 return new Filter() {
163
164
165 private List<String> requiredPrefs = Arrays.asList(requiredPrefixes);
166
167 @Override
168 public boolean isLoggable(final LogRecord record) {
169
170 final String loggerName = record.getLoggerName();
171 for (String current : requiredPrefs) {
172 if (loggerName.startsWith(current)) {
173 return true;
174 }
175 }
176
177
178 return false;
179 }
180 };
181 }
182 }