human
I wrote the below code

    def entryExitLoggingDecorator(func):
        @functools.wraps(func)
        def entryExitLoggingWrap(*args, **kwargs):
            if (entryExitLogLevel is None):
                enabled = False
            else:
                logger = getLoggerCallback()
                enabled = logger.isEnabledFor(entryExitLogLevel)
            if (not enabled):
                return func(*args, **kwargs)
            funcName = str(func)
            if logArgs:
                argsRepr = ',    '.join(([repr(a) for a in args] + [('%s=%r' % (k, v)) for (k, v) in kwargs.iteritems()]))
            else:
                argsRepr = ''
            logger.log(entryExitLogLevel, 'ENTERING:    %s(%s)%s', funcName, argsRepr, ('' if (not logTraceback) else ('.
   ' + repr(traceback.format_stack()))))
            try:
                return func(*args, **kwargs)
            finally:
                logger.log(entryExitLogLevel, 'LEAVING:    %s(%s)%s', funcName, argsRepr, ('' if (not logTraceback) else ('.
   ' + repr(traceback.format_stack()))))
        return entryExitLoggingWrap
    return entryExitLoggingDecorator

What's a good function header?
 ... Here's a good function header?
assistant
#Here's a good function header.

def logEntryExit(getLoggerCallback=logging.getLogger, entryExitLogLevel=logging.DEBUG, logArgs=False, logTraceback=False):