Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,26 @@ public class MetafactureLogger {
private final Logger externalLogger;
private final Logger internalLogger;

public enum Level {

ERROR((l, f, a) -> l.error(f, a)),
WARN((l, f, a) -> l.warn(f, a)),
INFO((l, f, a) -> l.info(f, a)),
DEBUG((l, f, a) -> l.debug(f, a)),
TRACE((l, f, a) -> l.trace(f, a));

private final LoggingConsumer consumer;

Level(final LoggingConsumer consumer) {
this.consumer = consumer;
}

private void log(final Logger logger, final String format, final Object... arguments) {
consumer.accept(logger, format, arguments);
}

}

/**
* Creates an instance of {@link MetafactureLogger} with the given class.
*
Expand Down Expand Up @@ -69,6 +89,97 @@ public Logger getExternalLogger() {
return externalLogger;
}

private void log(final Level level, final Logger logger, final String format, final Object... arguments) {
level.log(logger, format, arguments);
}

private void log(final String level, final Logger logger, final String format, final Object... arguments) {
final Level levelValue;

try {
levelValue = Level.valueOf(level);
}
catch (final IllegalArgumentException e) {
throw new IllegalArgumentException("Unsupported log level: " + level, e);
}

log(levelValue, logger, format, arguments);
}

/**
* Logs an <i>internal</i> message at the specified {@link Level level}
* according to the specified format and arguments.
*
* @param level the log level
* @param format the format string
* @param arguments a list of arguments
*/
public void log(final Level level, final String format, final Object... arguments) {
log(level, internalLogger, format, arguments);
}

/**
* Logs an <i>internal</i> message at the specified {@link Level level}
* according to the specified format and arguments.
*
* @param level the log level
* @param format the format string
* @param arguments a list of arguments
*/
public void log(final String level, final String format, final Object... arguments) {
log(level, internalLogger, format, arguments);
}

/**
* Logs an <i>external</i> message at the specified {@link Level level}
* according to the specified format and arguments.
*
* @param level the log level
* @param format the format string
* @param arguments a list of arguments
*/
public void externalLog(final Level level, final String format, final Object... arguments) {
log(level, externalLogger, format, arguments);
}

/**
* Logs an <i>external</i> message at the specified {@link Level level}
* according to the specified format and arguments.
*
* @param level the log level
* @param format the format string
* @param arguments a list of arguments
*/
public void externalLog(final String level, final String format, final Object... arguments) {
log(level, externalLogger, format, arguments);
}

/**
* Logs an <i>internal and external</i> message at the specified {@link Level level}
* according to the specified format and arguments.
*
* @param level the log level
* @param format the format string
* @param arguments a list of arguments
*/
public void combinedLog(final Level level, final String format, final Object... arguments) {
log(level, format, arguments);
externalLog(level, format, arguments);
}

/**
* Logs an <i>internal and external</i> message at the specified {@link Level level}
* according to the specified format and arguments.
*
* @param level the log level
* @param format the format string
* @param arguments a list of arguments
*/
public void combinedLog(final String level, final String format, final Object... arguments) {
log(level, format, arguments);
externalLog(level, format, arguments);
}

/**
* Logs an <i>internal</i> message at the ERROR level according to the
* specified format and arguments.
Expand Down Expand Up @@ -239,4 +350,9 @@ public void combinedTrace(final String format, final Object... arguments) {
externalTrace(format, arguments);
}

@FunctionalInterface
private interface LoggingConsumer {
void accept(Logger logger, String format, Object... arguments);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,14 @@ public final class ObjectBatchLogger<T> extends DefaultObjectPipe<T, ObjectRecei
public static final String BATCH_COUNT_VAR = "batches";
public static final String BATCH_SIZE_VAR = "batchSize";
public static final String DEFAULT_FORMAT = "records processed: ${totalRecords}";
public static final String DEFAULT_LEVEL = "INFO";

private static final MetafactureLogger LOG = new MetafactureLogger(ObjectBatchLogger.class);

private final Map<String, String> vars = new HashMap<String, String>();
private final String format;

private String level = DEFAULT_LEVEL;
private long batchSize = DEFAULT_BATCH_SIZE;
private long recordCount;
private long batchCount;
Expand Down Expand Up @@ -96,12 +98,21 @@ public void setBatchSize(final int batchSize) {
this.batchSize = batchSize;
}

/**
* Sets the {@link MetafactureLogger.Level log level}.
*
* @param level the log level
*/
public void setLevel(final String level) {
this.level = level;
}

private void writeLog() {
vars.put(RECORD_COUNT_VAR, Long.toString(recordCount));
vars.put(BATCH_COUNT_VAR, Long.toString(batchCount));
vars.put(BATCH_SIZE_VAR, Long.toString(batchSize));
vars.put(TOTAL_RECORD_COUNT_VAR, Long.toString((batchSize * batchCount) + recordCount));
LOG.externalInfo(StringUtil.format(format, vars));
LOG.externalLog(level, StringUtil.format(format, vars));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
import org.metafacture.framework.annotations.Out;
import org.metafacture.framework.helpers.DefaultObjectPipe;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* Logs the string representation of every object.
*
Expand All @@ -39,8 +43,11 @@
public final class ObjectLogger<T>
extends DefaultObjectPipe<T, ObjectReceiver<T>> {

public static final String DEFAULT_LEVEL = "INFO";

private static final MetafactureLogger LOG = new MetafactureLogger(ObjectLogger.class);

private String level = DEFAULT_LEVEL;
private String logPrefix = "";

/**
Expand Down Expand Up @@ -71,22 +78,40 @@ public void setPrefix(final String prefix) {
this.logPrefix = prefix;
}

/**
* Sets the {@link MetafactureLogger.Level log level}.
*
* @param level the log level
*/
public void setLevel(final String level) {
this.level = level;
}

@Override
public void process(final T obj) {
LOG.externalDebug("{}{}", logPrefix, obj);
writeLog("{}", obj);
if (getReceiver() != null) {
getReceiver().process(obj);
}
}

@Override
protected void onResetStream() {
LOG.externalDebug("{}resetStream", logPrefix);
writeLog("resetStream");
}

@Override
protected void onCloseStream() {
LOG.externalDebug("{}closeStream", logPrefix);
writeLog("closeStream");
}

private void writeLog(final String message, final Object... arguments) {
final List<Object> argumentList = new ArrayList<>(arguments.length + 1);

argumentList.add(logPrefix);
Arrays.stream(arguments).forEach(argumentList::add);

LOG.externalLog(level, "{}" + message, argumentList.toArray());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
* @author Markus Michael Geipel
* @author Christoph Böhme
*/
@Description("Writes log info every BATCHSIZE records. ")
@Description("Writes log info every BATCHSIZE records.")
@In(StreamReceiver.class)
@Out(StreamReceiver.class)
@FluxCommand("batch-log")
Expand All @@ -45,6 +45,7 @@ public final class StreamBatchLogger extends ForwardingStreamPipe {
public static final String BATCH_SIZE_VAR = "batchSize";
public static final String TOTAL_RECORD_COUNT_VAR = "totalRecords";
public static final String DEFAULT_FORMAT = "records processed: ${totalRecords}";
public static final String DEFAULT_LEVEL = "INFO";

public static final long DEFAULT_BATCH_SIZE = 1000;

Expand All @@ -53,6 +54,7 @@ public final class StreamBatchLogger extends ForwardingStreamPipe {
private final Map<String, String> vars = new HashMap<>();
private final String format;

private String level = DEFAULT_LEVEL;
private long batchSize = DEFAULT_BATCH_SIZE;
private long recordCount;
private long batchCount;
Expand Down Expand Up @@ -94,6 +96,15 @@ public void setBatchSize(final int batchSize) {
this.batchSize = batchSize;
}

/**
* Sets the {@link MetafactureLogger.Level log level}.
*
* @param level the log level
*/
public void setLevel(final String level) {
this.level = level;
}

/**
* Gets the batch size.
*
Expand Down Expand Up @@ -149,7 +160,7 @@ private void writeLog() {
vars.put(BATCH_SIZE_VAR, Long.toString(batchSize));
vars.put(TOTAL_RECORD_COUNT_VAR,
Long.toString(batchSize * batchCount + recordCount));
LOG.externalInfo(StringUtil.format(format, vars));
LOG.externalLog(level, StringUtil.format(format, vars));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,12 @@
import org.metafacture.framework.annotations.Out;
import org.metafacture.framework.helpers.DefaultStreamPipe;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* Leaves the event stream untouched but logs it to the debug log.
* Leaves the event stream untouched but logs it to the info log.
* The {@link StreamReceiver} may be {@code null}.
* In this case {@link StreamLogger} behaves as a sink, just logging.
*
Expand All @@ -39,8 +43,11 @@
public final class StreamLogger
extends DefaultStreamPipe<StreamReceiver> {

public static final String DEFAULT_LEVEL = "INFO";

private static final MetafactureLogger LOG = new MetafactureLogger(StreamLogger.class);

private String level = DEFAULT_LEVEL;
private String logPrefix = "";

/**
Expand Down Expand Up @@ -71,10 +78,19 @@ public void setPrefix(final String prefix) {
this.logPrefix = prefix;
}

/**
* Sets the {@link MetafactureLogger.Level log level}.
*
* @param level the log level
*/
public void setLevel(final String level) {
this.level = level;
}

@Override
public void startRecord(final String identifier) {
assert !isClosed();
LOG.externalDebug("{}start record {}", logPrefix, identifier);
writeLog("start record {}", identifier);
if (null != getReceiver()) {
getReceiver().startRecord(identifier);
}
Expand All @@ -83,7 +99,7 @@ public void startRecord(final String identifier) {
@Override
public void endRecord() {
assert !isClosed();
LOG.externalDebug("{}end record", logPrefix);
writeLog("end record");
if (null != getReceiver()) {
getReceiver().endRecord();
}
Expand All @@ -92,7 +108,7 @@ public void endRecord() {
@Override
public void startEntity(final String name) {
assert !isClosed();
LOG.externalDebug("{}start entity {}", logPrefix, name);
writeLog("start entity {}", name);
if (null != getReceiver()) {
getReceiver().startEntity(name);
}
Expand All @@ -101,7 +117,7 @@ public void startEntity(final String name) {
@Override
public void endEntity() {
assert !isClosed();
LOG.externalDebug("{}end entity", logPrefix);
writeLog("end entity");
if (null != getReceiver()) {
getReceiver().endEntity();
}
Expand All @@ -111,20 +127,29 @@ public void endEntity() {
@Override
public void literal(final String name, final String value) {
assert !isClosed();
LOG.externalDebug("{}literal {}={}", logPrefix, name, value);
writeLog("literal {}={}", name, value);
if (null != getReceiver()) {
getReceiver().literal(name, value);
}
}

@Override
protected void onResetStream() {
LOG.externalDebug("{}resetStream", logPrefix);
writeLog("resetStream");
}

@Override
protected void onCloseStream() {
LOG.externalDebug("{}closeStream", logPrefix);
writeLog("closeStream");
}

private void writeLog(final String message, final Object... arguments) {
final List<Object> argumentList = new ArrayList<>(arguments.length + 1);

argumentList.add(logPrefix);
Arrays.stream(arguments).forEach(argumentList::add);

LOG.externalLog(level, "{}" + message, argumentList.toArray());
}

}
Loading
Loading