public class LogStream extends com.google.common.collect.AbstractIterator<LogMessage> implements Closeable
Modifier and Type | Field and Description |
---|---|
private boolean |
closed |
private static org.slf4j.Logger |
log |
private LogReader |
reader |
Constructor and Description |
---|
LogStream(InputStream stream) |
Modifier and Type | Method and Description |
---|---|
void |
attach(OutputStream stdout,
OutputStream stderr)
Attach
OutputStreams to the LogStream . |
void |
close() |
protected LogMessage |
computeNext() |
protected void |
finalize() |
String |
readFully() |
endOfData, hasNext, next, peek
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
forEachRemaining
private static final org.slf4j.Logger log
private final LogReader reader
private volatile boolean closed
LogStream(InputStream stream)
protected void finalize() throws Throwable
protected LogMessage computeNext()
computeNext
in class com.google.common.collect.AbstractIterator<LogMessage>
public void close()
close
in interface Closeable
close
in interface AutoCloseable
public String readFully()
public void attach(OutputStream stdout, OutputStream stderr) throws IOException
OutputStreams
to the LogStream
.
Example usage:
dockerClient
.attachContainer(containerId,
AttachParameter.LOGS, AttachParameter.STDOUT,
AttachParameter.STDERR, AttachParameter.STREAM)
.attach(System.out, System.err);
Typically you use PipedOutputStreams
connected to a
PipedInputStream
which are read by - for example - an InputStreamReader
or a
Scanner
. For small inputs, the PipedOutputStream
just writes to the buffer of
the PipedInputStream
, but you actually want to read and write from separate threads, as
it may deadlock the thread.
final PipedInputStream stdout = new PipedInputStream();
final PipedInputStream stderr = new PipedInputStream();
final PipedOutputStream stdout_pipe = new PipedOutputStream(stdout);
final PipedOutputStream stderr_pipe = new PipedOutputStream(stderr);
executor.submit(new Callable<Void>() {
@Override
public Void call() throws Exception {
dockerClient.attachContainer(containerId,
AttachParameter.LOGS, AttachParameter.STDOUT,
AttachParameter.STDERR, AttachParameter.STREAM
.attach(stdout_pipe, stderr_pipe);
return null;
}
});
try (Scanner sc_stdout = new Scanner(stdout); Scanner sc_stderr = new Scanner(stderr)) {
// ... read here
}
stdout
- OutputStream for the standard out.stderr
- OutputStream for the standard errIOException
- if an I/O error occurs.PipedInputStream
,
PipedOutputStream
Copyright © 2015. All rights reserved.