package org.testcontainers.containers.output;
import org.slf4j.Logger;
import java.util.function.Consumer;
import java.util.regex.Pattern;
/**
* A consumer for container output that logs output to an SLF4J logger.
*/
public class Slf4jLogConsumer implements Consumer<OutputFrame> {
private final Logger logger;
private String prefix = "";
private static final Pattern ANSI_CODE_PATTERN = Pattern.compile("\\[\\d[ABCD]");
public Slf4jLogConsumer(Logger logger) {
this.logger = logger;
}
public Slf4jLogConsumer withPrefix(String prefix) {
this.prefix = "[" + prefix + "] ";
return this;
}
@Override
public void accept(OutputFrame outputFrame) {
if (outputFrame != null) {
String utf8String = outputFrame.getUtf8String();
if (utf8String != null) {
OutputFrame.OutputType outputType = outputFrame.getType();
String message = utf8String.trim();
if (ANSI_CODE_PATTERN.matcher(message).matches()) {
return;
}
switch (outputType) {
case END:
break;
case STDOUT:
case STDERR:
logger.info("{}{}: {}", prefix, outputType, message);
break;
default:
throw new IllegalArgumentException("Unexpected outputType " + outputType);
}
}
}
}
}