"""Helper function to setup logging."""from__future__importannotationsimportloggingfromtypingimportTYPE_CHECKINGfrom._console_handlerimportConsoleHandlerfrom._constantsimportDEFAULT_LOG_FORMATfrom.settingsimportLoggingSettingsfrom.utilsimportoptionally_replace_handlerifTYPE_CHECKING:fromcollections.abcimportIterablefromtypesimportModuleTypefromrich.consoleimportConsolefromrich.highlighterimportHighlighterfrom._log_levelimportLogLevel
[docs]defsetup_logging(*,console:Console,formatter:logging.Formatter|None=None,handler_kls:type[ConsoleHandler]|None=None,highlighter:Highlighter|None=None,level:LogLevel|None=None,logger:logging.Logger,reconfigure:bool=False,settings:LoggingSettings|None=None,tracebacks_suppress:Iterable[ModuleType|str]=("click",),)->None:"""Set up :mod:`rich` logging. This function is similar in purpose to :func:`logging.basicConfig`. Both setup logging with a lot of optional keyword arguments with logical defaults that *should* cover most needs. When using this function, **DO NOT** add any other handlers to a :class:`~logging.Logger` that would propagate to what is passed to this function. Doing so will result in duplicate log statements. This is intended to be the **last** or **only** step when setting up logging (other than setting levels). Args: console: :class:`~rich.console.Console` to log to. formatter: :class:`logging.Formatter` to add to the :class:`logging.Handler`. handler_kls: Override the handler class to use. highlighter: Optional :class:`~rich.highlighter.Highlighter` to use. If not provided, :mod:`rich's <rich>` default :class:`~rich.highlighter.Highlighter` is used. level: :class:`~f_lib.logging.LogLevel` to set. logger: Instance of the :class:`~f_lib.logging.Logger` to setup. reconfigure: Replace previous log configuration if found. settings: :class:`~f_lib.logging.settings.LoggingSettings` object. tracebacks_suppress: List of tracebacks to suppress. """handler_kls=ConsoleHandlerifhandler_klsisNoneelsehandler_klssettings=settingsifsettingselseLoggingSettings()iflevel:logger.setLevel(level)handler,logger=optionally_replace_handler(logger,reconfigure=reconfigure)ifnot(handlerandnotreconfigure):filters=handler.filtersifhandlerelseNonehandler=handler_kls(console=console,highlighter=highlighter,log_time_format=settings.console.time_format,markup=settings.console.enable_markup,rich_tracebacks=settings.console.enable_rich_tracebacks,show_level=settings.console.show_level,show_path=settings.console.show_path,show_time=settings.console.show_time,tracebacks_show_locals=settings.console.tracebacks_show_locals,tracebacks_suppress=tracebacks_suppress,tracebacks_theme=settings.console.tracebacks_theme,)iffilters:handler.filters=filtershandler.setFormatter(formatterifformatterisnotNoneelselogging.Formatter(DEFAULT_LOG_FORMAT))logger.addHandler(handler)