private void inferCaller(){
  needToInferCaller=false;
  Throwable throwable=new Throwable();
  boolean lookingForLogger=true;
  for (  final StackTraceElement frame : throwable.getStackTrace()) {
    String cname=frame.getClassName();
    boolean isLoggerImpl=isLoggerImplFrame(cname);
    if (lookingForLogger) {
      if (isLoggerImpl) {
        lookingForLogger=false;
      }
    }
 else {
      if (!isLoggerImpl) {
        if (!cname.startsWith("java.lang.reflect.") && !cname.startsWith("sun.reflect.")) {
          setSourceClassName(cname);
          setSourceMethodName(frame.getMethodName());
          return;
        }
      }
    }
  }
}

private void inferCaller ( ) { needToInferCaller = false ; Throwable throwable = new Throwable ( ) ; boolean lookingForLogger = true ; for ( final StackTraceElement frame : throwable . getStackTrace ( ) ) { String cname = frame . getClassName ( ) ; boolean isLoggerImpl = isLoggerImplFrame ( cname ) ; if ( lookingForLogger ) { if ( isLoggerImpl ) { lookingForLogger = false ; } } else { if ( ! isLoggerImpl ) { if ( ! cname . startsWith ( "java.lang.reflect." ) && ! cname . startsWith ( "sun.reflect." ) ) { setSourceClassName ( cname ) ; setSourceMethodName ( frame . getMethodName ( ) ) ; return ; } } } } }
determines the source information for the caller of the logger ( class name , method name , and line number )
