-
-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathLogHandler.java
More file actions
130 lines (112 loc) · 4.04 KB
/
Copy pathLogHandler.java
File metadata and controls
130 lines (112 loc) · 4.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package io.jenkins.plugins.util;
import com.google.errorprone.annotations.FormatMethod;
import edu.hm.hafner.util.FilteredLog;
import java.util.List;
import hudson.model.TaskListener;
/**
* Handles logging of issues log and error messages to a {@link TaskListener} instance.
*
* @author Ullrich Hafner
*/
public class LogHandler {
private final PluginLogger errorLogger;
private final PluginLogger infoLogger;
private int infoPosition;
private int errorPosition;
private boolean quiet;
/**
* Creates a new {@link LogHandler}.
*
* @param listener
* the task listener that will print all log messages
* @param name
* the name of the logger
*/
public LogHandler(final TaskListener listener, final String name) {
this(listener, name, 0, 0);
}
/**
* Creates a new {@link LogHandler}.
*
* @param listener
* the task listener that will print all log messages
* @param name
* the name of the logger
* @param logger
* the logger that contains the actual log messages
*/
public LogHandler(final TaskListener listener, final String name, final FilteredLog logger) {
this(listener, name, logger.getInfoMessages().size(), logger.getErrorMessages().size());
}
private LogHandler(final TaskListener listener, final String name, final int infoPosition,
final int errorPosition) {
infoLogger = createLogger(listener, name);
errorLogger = createErrorLogger(listener, name);
this.infoPosition = infoPosition;
this.errorPosition = errorPosition;
}
private PluginLogger createErrorLogger(final TaskListener listener, final String name) {
return createLogger(listener, "[%s] [-ERROR-]".formatted(name));
}
private PluginLogger createLogger(final TaskListener listener, final String name) {
return new PluginLogger(listener.getLogger(), name);
}
/**
* Log all info and error messages that are stored in the set of issues. Note that subsequent calls to this method
* will only log messages that have not yet been logged.
*
* @param logger
* the logger with the collected messages
*/
public void log(final FilteredLog logger) {
logErrorMessages(logger);
logInfoMessages(logger);
}
/**
* Logs the specified message.
*
* @param format
* A <a href="../util/Formatter.html#syntax">format string</a>
* @param args
* Arguments referenced by the format specifiers in the format string. If there are more arguments than
* format specifiers, the extra arguments are ignored. The number of arguments is variable and may be
* zero.
*/
@FormatMethod
public void log(final String format, final Object... args) {
infoLogger.log(format, args);
}
private void logErrorMessages(final FilteredLog logger) {
logErrorMessages(logger.getErrorMessages());
}
/**
* Logs the specified error messages.
*
* @param errorMessages
* the error messages to log
*/
public void logErrorMessages(final List<String> errorMessages) {
if (errorPosition < errorMessages.size() && !quiet) {
errorLogger.logEachLine(errorMessages.subList(errorPosition, errorMessages.size()));
errorPosition = errorMessages.size();
}
}
private void logInfoMessages(final FilteredLog logger) {
logInfoMessages(logger.getInfoMessages());
}
/**
* Logs the specified information messages.
*
* @param infoMessages
* the information messages to log
*/
public void logInfoMessages(final List<String> infoMessages) {
if (infoPosition < infoMessages.size() && !quiet) {
infoLogger.logEachLine(infoMessages.subList(infoPosition, infoMessages.size()));
infoPosition = infoMessages.size();
}
}
public void setQuiet(final boolean quiet) {
this.quiet = quiet;
}
}