1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.cling.invoker.logging;
20
21 import java.io.OutputStream;
22 import java.io.PrintStream;
23 import java.io.PrintWriter;
24 import java.util.Objects;
25
26 import org.apache.maven.api.annotations.Nullable;
27 import org.apache.maven.api.cli.Logger;
28
29 import static java.util.Objects.requireNonNull;
30
31
32
33
34
35 public class SystemLogger implements Logger {
36 private final PrintWriter out;
37 private final Level threshold;
38
39 public SystemLogger(@Nullable OutputStream out) {
40 this(out, null);
41 }
42
43 public SystemLogger(@Nullable OutputStream out, @Nullable Level threshold) {
44 this.out = new PrintWriter(toPsOrDef(out, System.err), true);
45 this.threshold = Objects.requireNonNullElse(threshold, Level.INFO);
46 }
47
48 private PrintStream toPsOrDef(OutputStream outputStream, PrintStream def) {
49 if (outputStream == null) {
50 return def;
51 }
52 if (outputStream instanceof PrintStream ps) {
53 return ps;
54 }
55 return new PrintStream(outputStream, true);
56 }
57
58 @Override
59 public void log(Level level, String message, Throwable error) {
60 requireNonNull(level, "level");
61 requireNonNull(message, "message");
62 if (level.ordinal() >= threshold.ordinal()) {
63 out.println("[" + level.name() + "] " + message);
64 if (error != null) {
65 error.printStackTrace(out);
66 }
67 }
68 }
69 }