package org.jcodec.common.logging; import java.lang.IllegalStateException; import java.lang.StackTraceElement; import java.lang.Thread; import java.util.LinkedList; import java.util.List; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed * under FreeBSD License * * JCodec has to be dependancy free, so it can run both on Java SE and Android * hence defining here our small logger that can be plugged into the logging * framework of choice on the target platform * * @author The JCodec project */ public class Logger { private static List<LogSink> stageSinks = new LinkedList<LogSink>(); private static List<LogSink> sinks; public static void debug(String message) { message(LogLevel.DEBUG, message); } public static void info(String message) { message(LogLevel.INFO, message); } public static void warn(String message) { message(LogLevel.WARN, message); } public static void error(String message) { message(LogLevel.ERROR, message); } private static void message(LogLevel level, String message) { if (sinks == null) { synchronized (Logger.class) { if (sinks == null) { sinks = stageSinks; stageSinks = null; if (sinks.isEmpty()) sinks.add(OutLogSink.createOutLogSink()); } } } StackTraceElement tr = Thread.currentThread().getStackTrace()[3]; Message msg = new Message(level, tr.getFileName(), tr.getClassName(), tr.getMethodName(), tr.getLineNumber(), message); for (LogSink logSink : sinks) { logSink.postMessage(msg); } } public static void addSink(LogSink sink) { if (stageSinks == null) throw new IllegalStateException("Logger already started"); stageSinks.add(sink); } }