code: public void log(LogLevel level, Throwable throwable, String message, Object... arguments)
      {
          // this is copied from log(LogEntry) to prevent unnecessary object creation
          if (level.compareTo(this.level) < 0)
          {
              return;
          }
  
          this.log(new LogEntry(level, throwable, message, arguments, ZonedDateTime.now()));
      }
docs: Log a message, with an array of object arguments and associated Throwable information.
  <p>
  If the logger is currently enabled for the given message
  level then the given message is forwarded to all the
  registered LogTarget objects.
  </p>
  
  @param level     the level to log with
  @param throwable the Throwable associated with this log message
  @param message   the message to log
  @param arguments the array of arguments for the message