code: public void logException(LogLevel logLevel, Throwable throwable, Class clazz, String methodName) {
      Date timeStamp = new Date();
      char border[] = new char[logLevel.toString().length() + 4];
      Arrays.fill(border, '*');
  
      String message;
      if (throwable.getMessage() != null) {
        message = throwable.getMessage().trim();
        message = message.replace(System.getProperty("line.separator"), " => ");
      }
      else {
        message = "No message.";
      }
  
      synchronized (this.syncObject) {
        this.tracePrintStream.println(border);
        this.tracePrintStream.printf("* %s *  [%tc] [%d,%s] [%s] [%s] \"%s\"%n", logLevel.toString(), timeStamp, Thread.currentThread().getId(), 
            Thread.currentThread().getName(), clazz.getName(), methodName, message);
        this.tracePrintStream.println(border);
        throwable.printStackTrace(this.tracePrintStream);
      }
    }
docs: Logs an exception with the given logLevel and the originating class.
  
  @param logLevel one of the predefined levels INFO, WARNING, ERROR, FATAL and SEVERE
  @param throwable the to be logged throwable
  @param clazz the originating class
  @param methodName the name of the relevant method