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.AbstractJaxbMojo;
24 import org.codehaus.mojo.jaxb2.shared.Validate;
25 import org.codehaus.mojo.jaxb2.shared.environment.AbstractLogAwareFacet;
26
27 import java.util.ArrayList;
28 import java.util.List;
29 import java.util.logging.Handler;
30 import java.util.logging.Level;
31 import java.util.logging.Logger;
32
33
34
35
36
37
38
39
40
41 public class LoggingHandlerEnvironmentFacet extends AbstractLogAwareFacet {
42
43
44
45
46 public static final String[] DEFAULT_LOGGER_NAMES = new String[]{"com.sun", "javax.xml", "javax.tools"};
47
48
49 private boolean restored;
50 private Logger rootLogger;
51 private Level originalRootLoggerLevel;
52 private List<Handler> originalHandlers;
53 private MavenLogHandler mavenLogHandler;
54
55 private String logPrefix;
56 private String encoding;
57 private String[] loggerNamePrefixes;
58
59
60
61
62
63
64
65
66
67
68
69 public LoggingHandlerEnvironmentFacet(final String logPrefix,
70 final Log mavenLog,
71 final String encoding,
72 final String[] loggerNamePrefixes) {
73
74 super(mavenLog);
75
76
77 Validate.notEmpty(encoding, "encoding");
78 Validate.notNull(loggerNamePrefixes, "loggerNamePrefixes");
79
80
81 this.originalHandlers = new ArrayList<Handler>();
82 this.logPrefix = logPrefix;
83 rootLogger = Logger.getLogger("");
84 originalRootLoggerLevel = rootLogger.getLevel();
85 this.encoding = encoding;
86 this.loggerNamePrefixes = loggerNamePrefixes;
87 }
88
89
90
91
92
93 @Override
94 public void setup() {
95
96
97 rootLogger.setLevel(MavenLogHandler.getJavaUtilLoggingLevelFor(log));
98 this.mavenLogHandler = new MavenLogHandler(log, logPrefix, encoding, loggerNamePrefixes);
99
100 for (Handler current : rootLogger.getHandlers()) {
101
102
103 originalHandlers.add(current);
104
105
106 rootLogger.removeHandler(current);
107 }
108
109
110 rootLogger.addHandler(this.mavenLogHandler);
111 }
112
113
114
115
116 public void restore() {
117
118 if (!restored) {
119
120
121 rootLogger.removeHandler(mavenLogHandler);
122
123
124 rootLogger.setLevel(originalRootLoggerLevel);
125 for (Handler current : originalHandlers) {
126 rootLogger.addHandler(current);
127 }
128
129
130 restored = true;
131 }
132 }
133
134
135
136
137
138
139
140
141
142 public static LoggingHandlerEnvironmentFacet create(final Log mavenLog,
143 final Class<? extends AbstractJaxbMojo> caller,
144 final String encoding) {
145
146
147 Validate.notNull(mavenLog, "mavenLog");
148 Validate.notNull(caller, "caller");
149 Validate.notEmpty(encoding, "encoding");
150
151
152 final String logPrefix = caller.getClass().getCanonicalName().toUpperCase().contains("XJC")
153 ? "XJC"
154 : "SchemaGen";
155
156
157 return new LoggingHandlerEnvironmentFacet(logPrefix, mavenLog, encoding, DEFAULT_LOGGER_NAMES);
158 }
159 }