Skip to content

Commit 8ab09d1

Browse files
committed
Capture remote log messages.
1 parent 5e845fe commit 8ab09d1

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

src/test/java/org/jenkinsci/plugins/workflow/log/LogStorageTestBase.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import hudson.model.TaskListener;
3030
import hudson.remoting.Channel;
3131
import hudson.remoting.VirtualChannel;
32+
import hudson.util.StreamTaskListener;
3233
import java.io.EOFException;
3334
import java.io.PrintWriter;
3435
import java.io.StringWriter;
@@ -38,7 +39,12 @@
3839
import java.util.Random;
3940
import java.util.concurrent.Callable;
4041
import java.util.function.BiFunction;
42+
import java.util.logging.Formatter;
43+
import java.util.logging.Handler;
4144
import java.util.logging.Level;
45+
import java.util.logging.LogRecord;
46+
import java.util.logging.Logger;
47+
import java.util.logging.SimpleFormatter;
4248
import jenkins.security.MasterToSlaveCallable;
4349
import org.apache.commons.io.FileUtils;
4450
import org.apache.commons.io.output.NullOutputStream;
@@ -157,6 +163,7 @@ protected static void close(TaskListener listener) throws Exception {
157163
long overallPos = assertOverallLog(0, "overall from master\n<span class=\"pipeline-node-1\">step from master\n</span>", true);
158164
long stepPos = assertStepLog("1", 0, "step from master\n", true);
159165
VirtualChannel channel = r.createOnlineSlave().getChannel();
166+
channel.call(new RemoteLogDumper("agent"));
160167
channel.call(new RemotePrint("overall from agent", overall));
161168
channel.call(new RemotePrint("step from agent", step));
162169
channel.call(new GC());
@@ -189,6 +196,31 @@ private static final class GC extends MasterToSlaveCallable<Void, Exception> {
189196
return null;
190197
}
191198
}
199+
// TODO copied from pipeline-log-cloudwatch; consider whether this should be moved into LoggerRule
200+
private static final class RemoteLogDumper extends MasterToSlaveCallable<Void, RuntimeException> {
201+
private final String name;
202+
private final TaskListener stderr = StreamTaskListener.fromStderr();
203+
RemoteLogDumper(String name) {
204+
this.name = name;
205+
}
206+
@Override public Void call() throws RuntimeException {
207+
Handler handler = new Handler() {
208+
final Formatter formatter = new SimpleFormatter();
209+
@Override public void publish(LogRecord record) {
210+
if (isLoggable(record)) {
211+
stderr.getLogger().print(formatter.format(record).replaceAll("(?m)^", "[" + name + "] "));
212+
}
213+
}
214+
@Override public void flush() {}
215+
@Override public void close() throws SecurityException {}
216+
};
217+
handler.setLevel(Level.ALL);
218+
Logger logger = Logger.getLogger(LogStorageTestBase.class.getPackage().getName());
219+
logger.setLevel(Level.FINER);
220+
logger.addHandler(handler);
221+
return null;
222+
}
223+
}
192224

193225
/**
194226
* Checks what happens when code using {@link TaskListener#getLogger} prints a line with inadequate synchronization.

0 commit comments

Comments
 (0)