def __init__( self, name: OptName = arg.AUTO, level: Level = arg.AUTO, formatter: Union[Formatter, arg.Auto] = arg.AUTO, loggers: SubLoggers = arg.AUTO, context: Context = None, file: Optional[FileOrName] = None, ): name = arg.acquire(name, DEFAULT_LOGGER_NAME) level = arg.acquire(level, DEFAULT_LOGGING_LEVEL) formatter = arg.acquire(formatter, DEFAULT_FORMATTER) if not isinstance(level, LoggingLevel): level = LoggingLevel(level) if isinstance(loggers, list): loggers = {i: i.get_name() for i in loggers} elif not arg.is_defined(loggers): loggers = dict() if name not in loggers: level_value = arg.get_value(level) base_logger = self.build_base_logger(name, level_value, formatter) loggers[name] = base_logger self._level = level super().__init__(name=name, children=loggers, context=context) if file: self.set_file(file)
def log( self, msg: Union[str, list, tuple], level: Level = arg.AUTO, logger: Union[BaseLogger, arg.Auto] = arg.AUTO, end: Union[str, arg.Auto] = arg.AUTO, verbose: bool = True, truncate: bool = True, category: Optional[Type] = None, stacklevel: Optional[int] = None, ) -> None: level = arg.acquire( level, LoggingLevel.Info if verbose else LoggingLevel.Debug) logger = arg.delayed_acquire(logger, self.get_base_logger) if isinstance(msg, BaseException): msg = str(msg) if isinstance(msg, str): msg = [msg] elif isinstance(msg, Iterable): msg = list(msg) else: raise TypeError( 'Expected msg as str or list[str], got {}'.format(msg)) if category: category_name = arg.get_name(category) msg = [category_name] + msg if stacklevel: caller = getframeinfo(stack()[stacklevel + 1][0]) file_name_without_path = caller.filename.split('\\')[-1].split( '/')[-1] msg = ['{}:{}:'.format(file_name_without_path, caller.lineno) ] + msg if isinstance(msg, (list, tuple)): msg = self.format_message(*msg) if not isinstance(level, LoggingLevel): level = LoggingLevel(level) if logger: if self.is_suitable_level(level): logging_method = getattr(logger, level.get_method_name()) logging_method(msg) if verbose and not self.is_suitable_level(level): self.show(msg, end=end, truncate=truncate)
def log( self, msg: Union[str, list, tuple], level: Level = arg.AUTO, logger: Union[BaseLogger, arg.Auto] = arg.AUTO, end: Union[str, arg.Auto] = arg.AUTO, verbose: bool = True, truncate: bool = True, ) -> NoReturn: level = arg.acquire(level, LoggingLevel.Info if verbose else LoggingLevel.Debug) logger = arg.delayed_acquire(logger, self.get_base_logger) if isinstance(msg, (list, tuple)): msg = self.format_message(*msg) if not isinstance(level, LoggingLevel): level = LoggingLevel(level) if logger: if self.is_suitable_level(level): logging_method = getattr(logger, level.get_method_name()) logging_method(msg) if verbose and not self.is_suitable_level(level): self.show(msg, end=end, truncate=truncate)
def get_method_name(level: LoggingLevel = LoggingLevel.Info): if not isinstance(level, LoggingLevel): level = LoggingLevel(level) return level.get_method_name()
from loggers.logging_context_stub import LoggingContextStub from loggers.fallback_logger import FallbackLogger except ImportError: # Apparently no higher-level package has been imported, fall back to a local import. from ..utils import arguments as arg from .logger_interface import LoggerInterface from .extended_logger_interface import ExtendedLoggerInterface, LoggingLevel from .selection_logger_interface import SelectionLoggerInterface from .extended_logger import ExtendedLogger, SingletonLogger, DEFAULT_LOGGER_NAME, DEFAULT_FORMATTER from .progress_interface import ProgressInterface, OperationStatus from .progress import Progress from .detailed_message import DetailedMessage, SelectionError from .message_collector import MessageCollector, SelectionMessageCollector, CommonMessageCollector from .logging_context_stub import LoggingContextStub from .fallback_logger import FallbackLogger DEFAULT_LOGGING_LEVEL = LoggingLevel.get_default() def get_method_name(level: LoggingLevel = LoggingLevel.Info): if not isinstance(level, LoggingLevel): level = LoggingLevel(level) return level.get_method_name() def get_logger(name=DEFAULT_LOGGER_NAME, level=DEFAULT_LOGGING_LEVEL, context=None): if name == DEFAULT_LOGGER_NAME: return SingletonLogger(name=name, level=level, context=context) else: return ExtendedLogger(name=name, level=level, context=context)