Log a message with specific log level.

@param logLevel the specific log level
@param format   the format of the message to log, null if just need to concat arguments
@param args     the arguments of the message to log
@since 1.4.0
515473
public void log(int logLevel, String format, Object... args) {
    println(logLevel, format, args);
  }
1127980
public void info(String format, Object arg) {
        formatAndLog(LOG_LEVEL_INFO, format, arg, null);
    }
1123539
public synchronized void log(@Nullable Level level, @Nullable String msg, @Nullable Throwable t) {
        if (!isLoggable(level))
            return;
        System.err.println(df.format(new Date()) + " [" + Thread.currentThread().getName() + "] " + name + " - " + level.getName() + ": " + msg);
        if (t != null)
            t.printStackTrace();

    }
686296
public void setLevel(@NonNull LogLevel level) {
        if (level == null) { throw new IllegalArgumentException("level cannot be null."); }

        if (logLevel == level) { return; }

        logLevel = level;
        setCallbackLevel(level);
    }
406438
public static void debug(String format, Object... arguments) {
		debug(LogFactory.get(CallerUtil.getCallerCaller()), format, arguments);
	}
352848
public static void error(Log log, Throwable e, String format, Object... arguments) {
		if (false == log(log, Level.ERROR, e, format, arguments)) {
			log.error(e, format, arguments);
		}
	}
28768
public static void trace(Log log, String format, Object... arguments) {
		if (false == log(log, Level.TRACE, null, format, arguments)) {
			log.trace(format, arguments);
		}
	}
694764
public void log(Level level, String loggerFqcn, Object message, Throwable t) {
        doLog(level, loggerFqcn, message, null, t);
    }
272567
public static void log(String format, Object...args) {
    System.out.println(String.format(format, args));
  }
735907
public static void log(Logger logger,
                           Level level,
                           String message,
                           Object[] parameters) {
        if (logger.isLoggable(level)) {
            String msg = localize(logger, message);
            try {
                msg = MessageFormat.format(msg, parameters);
            } catch (IllegalArgumentException ex) {
                //ignore, log as is
            }
            doLog(logger, level, msg, null);
        }
    }
1374632
public void logv(Level level, Throwable t, String format, Object... params) {
        doLog(level, FQCN, format, params, t);
    }
403122
public void i(String format, Object... args) {
    println(LogLevel.INFO, format, args);
  }
17693
public void trace(String format, Object... args) {
        if (!logger.isTraceEnabled())
            return;

        if (instanceofLAL) {
            String formattedMessage = MessageFormatter.arrayFormat(format, args).getMessage();
            ((LocationAwareLogger) logger).log(null, fqcn, LocationAwareLogger.TRACE_INT, formattedMessage, args, null);
        } else {
            logger.trace(format, args);
        }
    }
563070
@Override
    public void info(String format, Object arg) {
        if (logger.isInfoEnabled()) {
            FormattingTuple ft = MessageFormatter.format(format, arg);
            logger.info(ft.getMessage(), ft.getThrowable());
        }
    }
299603
public void d(String format, Object... args) {
    println(LogLevel.DEBUG, format, args);
  }
964945
public static void warn(Log log, Throwable e, String format, Object... arguments) {
		if (false == log(log, Level.WARN, e, format, arguments)) {
			log.warn(e, format, arguments);
		}
	}
199594
protected static void log(Level level, Object message, Throwable throwable, Object... args) {
		Message payload = payload(message, args, throwable);
		payload.getFormattedMessage(); // preformat message (cached), so formating has processed and added fields to MetaContext
		if (MetaContext.hasMeta()) {
			// serialize metacontext map to json, which is put into a designated threadcontext field
			ThreadContext.put(JSON_FIELD, MetaContext.toJson());
			MetaContext.clear();
		}
		determineLogger().log(level, payload, payload.getThrowable());
		if (ThreadContext.getContext() != null && ThreadContext.containsKey(JSON_FIELD)) {
			ThreadContext.remove(JSON_FIELD);
		}
	}