Make cmd_showing_output work with subprocesses that use '\r'.
[python_utils.git] / logging_utils.py
index f7fac03cd913ef22106fbc25cea821e161e62187..c04d76d610708b5ff731c9ca4cd5a4f988c35867 100644 (file)
@@ -146,7 +146,7 @@ cfg.add_argument(
 cfg.add_argument(
     '--logging_clear_preexisting_handlers',
     action=argparse_utils.ActionNoYes,
-    default=False,
+    default=True,
     help=(
         'Should logging code clear preexisting global logging handlers and thus insist that is ' +
         'alone can add handlers.  Use this to work around annoying modules that insert global ' +
@@ -159,29 +159,6 @@ built_in_print = print
 logging_initialized = False
 
 
-def function_identifier(f: Callable) -> str:
-    """
-    Given a callable function, return a string that identifies it.
-    Usually that string is just __module__:__name__ but there's a
-    corner case: when __module__ is __main__ (i.e. the callable is
-    defined in the same module as __main__).  In this case,
-    f.__module__ returns "__main__" instead of the file that it is
-    defined in.  Work around this using pathlib.Path (see below).
-
-    >>> function_identifier(function_identifier)
-    'logging_utils:function_identifier'
-
-    """
-    if f.__module__ == '__main__':
-        from pathlib import Path
-        import __main__
-        module = __main__.__file__
-        module = Path(module).stem
-        return f'{module}:{f.__name__}'
-    else:
-        return f'{f.__module__}:{f.__name__}'
-
-
 # A map from logging_callsite_id -> count of logged messages.
 squelched_logging_counts: Mapping[str, int] = {}
 
@@ -200,7 +177,8 @@ def squelch_repeated_log_messages(squelch_after_n_repeats: int) -> Callable:
 
     """
     def squelch_logging_wrapper(f: Callable):
-        identifier = function_identifier(f)
+        import function_utils
+        identifier = function_utils.function_identifier(f)
         squelched_logging_counts[identifier] = squelch_after_n_repeats
         return f
     return squelch_logging_wrapper
@@ -334,7 +312,8 @@ def logging_is_probabilistic(probability_of_logging: float) -> Callable:
 
     """
     def probabilistic_logging_wrapper(f: Callable):
-        identifier = function_identifier(f)
+        import function_utils
+        identifier = function_utils.function_identifier(f)
         probabilistic_logging_levels[identifier] = probability_of_logging
         return f
     return probabilistic_logging_wrapper
@@ -523,7 +502,7 @@ def initialize_logging(logger=None) -> logging.Logger:
         f'Initialized global logging; default logging level is {level_name}.'
     )
     if config.config['logging_clear_preexisting_handlers'] and preexisting_handlers_count > 0:
-        msg = 'Logging cleared {preexisting_handlers_count} global handlers (--logging_clear_preexisting_handlers)'
+        msg = f'Logging cleared {preexisting_handlers_count} global handlers (--logging_clear_preexisting_handlers)'
         logger.warning(msg)
     logger.debug(f'Logging format specification is "{fmt}"')
     if config.config['logging_debug_threads']: