def _find_caller(self):
        """
        Find the stack frame of the caller so that we can note the source file
        name, line number, and function name.
        """
        rv = ('(unknown file)',
              0,
              '(unknown function)',
              '(code not available)',
              [],
              None)
        f = inspect.currentframe()
        while hasattr(f, 'f_code'):
            co = f.f_code
            filename = os.path.normcase(co.co_filename)
            # When lggr is imported as a module, the `_src_file` filename ends
            # in '.pyc', while the filename grabbed from inspect will end in
            # '.py'. We use splitext here to compare absolute paths without the
            # extension, which restores the intended behavior of dropping down
            # the callstack until we reach the first file not part of this
            # library.
            if os.path.splitext(filename)[0] == os.path.splitext(_srcfile)[0]:
                f = f.f_back # get out of this logging file
                continue
            sinfo = traceback.extract_stack(f)
            fname, lno, fnc, cc, i = inspect.getframeinfo(f, context=10)

            # Mark the calling line with a >
            cc = map(lambda info: ('> ' if info[0] == i else '| ') + info[1],
                     enumerate(cc))
            code = '>' + cc[i]
            rv = (fname, lno, fnc, code, cc, sinfo)
            break
        return rv
Find the stack frame of the caller so that we can note the source file
        name, line number, and function name.