code: protected String[] getCaller() {
          final StackTraceElement[] stack = (new Throwable()).getStackTrace();
          final String loggerClassname = getClass().getName();
  
          final String callerName;
          final String callerMethod;
  
          int i = 0;
          while (i < stack.length) {
              final StackTraceElement ste = stack[i];
              final String fc = ste.getClassName();
              if (fc.equals(loggerClassname)) {
                  break;
              }
  
              i++;
          }
  
          //skip an extra frame... we call ourselves
          i++;
  
          while (i < stack.length) {
              final StackTraceElement ste = stack[i];
              final String fc = ste.getClassName();
              if (!fc.equals(loggerClassname)) {
                  callerMethod = ste.getMethodName();
                  callerName = fc;
                  return new String[]{callerName, callerMethod};
              }
              i++;
          }
          return new String[]{"", ""};
      }
docs: returns an array (class, method) of the caller before our logger class in the stack