code: private LogEntry createLogEntry(final StackTraceElement stackTraceElement, final String tag, final int tagIndex, final Level level,
  		final Throwable exception, final Object obj, final Object[] arguments) {
  		Collection<LogEntryValue> required = requiredLogEntryValues[tagIndex][level.ordinal()];
  
  		Timestamp timestamp = RuntimeProvider.createTimestamp();
  		Thread thread = required.contains(LogEntryValue.THREAD) ? Thread.currentThread() : null;
  		Map<String, String> context = required.contains(LogEntryValue.CONTEXT) ? this.context.getMapping() : null;
  
  		String className;
  		String methodName;
  		String fileName;
  		int lineNumber;
  		if (stackTraceElement == null) {
  			className = null;
  			methodName = null;
  			fileName = null;
  			lineNumber = -1;
  		} else {
  			className = stackTraceElement.getClassName();
  			methodName = stackTraceElement.getMethodName();
  			fileName = stackTraceElement.getFileName();
  			lineNumber = stackTraceElement.getLineNumber();
  		}
  
  		String message;
  		if (arguments == null || arguments.length == 0) {
  			Object evaluatedObject = obj instanceof Supplier<?> ? ((Supplier<?>) obj).get() : obj;
  			message = evaluatedObject == null ? null : evaluatedObject.toString();
  		} else {
  			message = formatter.format((String) obj, arguments);
  		}
  
  		return new LogEntry(timestamp, thread, context, className, methodName, fileName, lineNumber, tag, level, message, exception);
  	}
docs: Creates a new log entry.
  
  @param stackTraceElement
  Optional stack trace element of caller
  @param tag
  Tag name if issued from a tagged logger
  @param tagIndex
  Index of tag
  @param level
  Severity level
  @param exception
  Caught exception or throwable to log
  @param obj
  Message to log
  @param arguments
  Arguments for message
  @return Filled log entry