# Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import logging import sys try: from colorlog import ColoredFormatter except ImportError: ColoredFormatter SUCCESS = 25 class LoggerWithSuccess(logging.getLoggerClass()): # type: ignore def __init__(self, name, level=logging.NOTSET): super(LoggerWithSuccess, self).__init__(name, level) logging.addLevelName(SUCCESS, "SUCCESS") def success(self, msg, *args, **kwargs): if self.isEnabledFor(SUCCESS): self._log(SUCCESS, msg, args, **kwargs) else: # pragma: no cover pass def _setup_logging(color: bool = bool(ColoredFormatter)): logging.getLogger("urllib3.connectionpool").setLevel(logging.ERROR) logging.setLoggerClass(LoggerWithSuccess) # Silence any noisy loggers here. logging.getLogger("watchdog.observers").setLevel(logging.INFO) def configure_logger(name: str, color: bool = bool(ColoredFormatter)): """Create and configure the default logger for autosynth. The logger will prefix the log message with the current time and the log severity. """ logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) handler = logging.StreamHandler() handler.setLevel(logging.DEBUG) if color is True and sys.stdout.isatty(): formatter = ColoredFormatter( "%(asctime)s %(purple)s%(name)s > %(log_color)s%(message)s", reset=True, log_colors={ "DEBUG": "cyan", "INFO": "blue", "WARNING": "yellow", "ERROR": "red", "CRITICAL": "red,bg_yellow", "SUCCESS": "green", }, ) else: formatter = logging.Formatter( # type: ignore "%(asctime)s %(name)s [%(levelname)s] > %(message)s" ) handler.setFormatter(formatter) logger.addHandler(handler) return logger _setup_logging() logger = configure_logger("synthtool") def success(*args, **kwargs): logger.success(*args, **kwargs) def debug(*args, **kwargs): logger.debug(*args, **kwargs) def info(*args, **kwargs): logger.info(*args, **kwargs) def warning(*args, **kwargs): logger.warning(*args, **kwargs) def error(*args, **kwargs): logger.warning(*args, **kwargs) def exception(*args, **kwargs): logger.warning(*args, **kwargs) def critical(*args, **kwargs): logger.critical(*args, **kwargs)