|
21 | 21 | import static feign.Util.valuesOrEmpty; |
22 | 22 | import static java.util.Objects.nonNull; |
23 | 23 |
|
| 24 | +import java.io.Closeable; |
24 | 25 | import java.io.IOException; |
25 | 26 | import java.io.PrintWriter; |
26 | 27 | import java.io.StringWriter; |
| 28 | +import java.util.ArrayList; |
| 29 | +import java.util.List; |
27 | 30 | import java.util.logging.FileHandler; |
| 31 | +import java.util.logging.Handler; |
28 | 32 | import java.util.logging.LogRecord; |
29 | 33 | import java.util.logging.SimpleFormatter; |
30 | 34 |
|
@@ -182,9 +186,10 @@ protected void log(String configKey, String format, Object... args) { |
182 | 186 | } |
183 | 187 |
|
184 | 188 | /** Logs to the category {@link Logger} at {@link java.util.logging.Level#FINE}, if loggable. */ |
185 | | - public static class JavaLogger extends Logger { |
| 189 | + public static class JavaLogger extends Logger implements Closeable { |
186 | 190 |
|
187 | 191 | final java.util.logging.Logger logger; |
| 192 | + private final List<Handler> handlers = new ArrayList<>(); |
188 | 193 |
|
189 | 194 | /** |
190 | 195 | * @deprecated Use {@link #JavaLogger(String)} or {@link #JavaLogger(Class)} instead. |
@@ -256,11 +261,21 @@ public String format(LogRecord record) { |
256 | 261 | } |
257 | 262 | }); |
258 | 263 | logger.addHandler(handler); |
| 264 | + handlers.add(handler); |
259 | 265 | } catch (IOException e) { |
260 | 266 | throw new IllegalStateException("Could not add file handler.", e); |
261 | 267 | } |
262 | 268 | return this; |
263 | 269 | } |
| 270 | + |
| 271 | + @Override |
| 272 | + public void close() { |
| 273 | + for (Handler handler : handlers) { |
| 274 | + logger.removeHandler(handler); |
| 275 | + handler.close(); |
| 276 | + } |
| 277 | + handlers.clear(); |
| 278 | + } |
264 | 279 | } |
265 | 280 |
|
266 | 281 | public static class NoOpLogger extends Logger { |
|
0 commit comments