package org.jcodec.common.logging; import static org.jcodec.common.tools.MainUtils.colorString; import org.jcodec.common.tools.MainUtils; import org.jcodec.common.tools.MainUtils.ANSIColor; import java.io.PrintStream; import java.lang.System; import java.util.HashMap; import java.util.Map; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed * under FreeBSD License * * Outputs messages to standard output * * @author The JCodec project */ public class OutLogSink implements LogSink { public static class SimpleFormat implements MessageFormat { private String fmt; private static Map<LogLevel, ANSIColor> colorMap = new HashMap<LogLevel, MainUtils.ANSIColor>(); static { colorMap.put(LogLevel.DEBUG, ANSIColor.BROWN); colorMap.put(LogLevel.INFO, ANSIColor.GREEN); colorMap.put(LogLevel.WARN, ANSIColor.MAGENTA); colorMap.put(LogLevel.ERROR, ANSIColor.RED); }; public SimpleFormat(String fmt) { this.fmt = fmt; } @Override public String formatMessage(Message msg) { return fmt .replace("#level", String.valueOf(msg.getLevel())) .replace("#color_code", String.valueOf(30 + colorMap.get(msg.getLevel()).ordinal())) .replace("#class", msg.getClassName()) .replace("#method", msg.getMethodName()) .replace("#file", msg.getFileName()) .replace("#line", String.valueOf(msg.getLineNumber())) .replace("#message", msg.getMessage()); } }; public static SimpleFormat DEFAULT_FORMAT = new SimpleFormat( colorString("[#level]", "#color_code") + MainUtils.bold("\t#class.#method (#file:#line):") + "\t#message"); public static OutLogSink createOutLogSink() { return new OutLogSink(System.out, DEFAULT_FORMAT); } private PrintStream out; private MessageFormat fmt; public OutLogSink(PrintStream out, MessageFormat fmt) { this.out = out; this.fmt = fmt; } @Override public void postMessage(Message msg) { out.println(fmt.formatMessage(msg)); } public static interface MessageFormat { String formatMessage(Message msg); } }