xref: /aosp_15_r20/external/google-cloud-java/owl-bot-postprocessor/synthtool/log.py (revision 55e87721aa1bc457b326496a7ca40f3ea1a63287)
1*55e87721SMatt Gilbride# Copyright 2018 Google LLC
2*55e87721SMatt Gilbride#
3*55e87721SMatt Gilbride# Licensed under the Apache License, Version 2.0 (the "License");
4*55e87721SMatt Gilbride# you may not use this file except in compliance with the License.
5*55e87721SMatt Gilbride# You may obtain a copy of the License at
6*55e87721SMatt Gilbride#
7*55e87721SMatt Gilbride#     https://www.apache.org/licenses/LICENSE-2.0
8*55e87721SMatt Gilbride#
9*55e87721SMatt Gilbride# Unless required by applicable law or agreed to in writing, software
10*55e87721SMatt Gilbride# distributed under the License is distributed on an "AS IS" BASIS,
11*55e87721SMatt Gilbride# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*55e87721SMatt Gilbride# See the License for the specific language governing permissions and
13*55e87721SMatt Gilbride# limitations under the License.
14*55e87721SMatt Gilbride
15*55e87721SMatt Gilbrideimport logging
16*55e87721SMatt Gilbrideimport sys
17*55e87721SMatt Gilbride
18*55e87721SMatt Gilbridetry:
19*55e87721SMatt Gilbride    from colorlog import ColoredFormatter
20*55e87721SMatt Gilbrideexcept ImportError:
21*55e87721SMatt Gilbride    ColoredFormatter
22*55e87721SMatt Gilbride
23*55e87721SMatt GilbrideSUCCESS = 25
24*55e87721SMatt Gilbride
25*55e87721SMatt Gilbride
26*55e87721SMatt Gilbrideclass LoggerWithSuccess(logging.getLoggerClass()):  # type: ignore
27*55e87721SMatt Gilbride    def __init__(self, name, level=logging.NOTSET):
28*55e87721SMatt Gilbride        super(LoggerWithSuccess, self).__init__(name, level)
29*55e87721SMatt Gilbride        logging.addLevelName(SUCCESS, "SUCCESS")
30*55e87721SMatt Gilbride
31*55e87721SMatt Gilbride    def success(self, msg, *args, **kwargs):
32*55e87721SMatt Gilbride        if self.isEnabledFor(SUCCESS):
33*55e87721SMatt Gilbride            self._log(SUCCESS, msg, args, **kwargs)
34*55e87721SMatt Gilbride        else:  # pragma: no cover
35*55e87721SMatt Gilbride            pass
36*55e87721SMatt Gilbride
37*55e87721SMatt Gilbride
38*55e87721SMatt Gilbridedef _setup_logging(color: bool = bool(ColoredFormatter)):
39*55e87721SMatt Gilbride    logging.getLogger("urllib3.connectionpool").setLevel(logging.ERROR)
40*55e87721SMatt Gilbride    logging.setLoggerClass(LoggerWithSuccess)
41*55e87721SMatt Gilbride
42*55e87721SMatt Gilbride    # Silence any noisy loggers here.
43*55e87721SMatt Gilbride    logging.getLogger("watchdog.observers").setLevel(logging.INFO)
44*55e87721SMatt Gilbride
45*55e87721SMatt Gilbride
46*55e87721SMatt Gilbridedef configure_logger(name: str, color: bool = bool(ColoredFormatter)):
47*55e87721SMatt Gilbride    """Create and configure the default logger for autosynth.
48*55e87721SMatt Gilbride    The logger will prefix the log message with the current time and the
49*55e87721SMatt Gilbride    log severity.
50*55e87721SMatt Gilbride    """
51*55e87721SMatt Gilbride    logger = logging.getLogger(name)
52*55e87721SMatt Gilbride    logger.setLevel(logging.DEBUG)
53*55e87721SMatt Gilbride
54*55e87721SMatt Gilbride    handler = logging.StreamHandler()
55*55e87721SMatt Gilbride    handler.setLevel(logging.DEBUG)
56*55e87721SMatt Gilbride
57*55e87721SMatt Gilbride    if color is True and sys.stdout.isatty():
58*55e87721SMatt Gilbride        formatter = ColoredFormatter(
59*55e87721SMatt Gilbride            "%(asctime)s %(purple)s%(name)s > %(log_color)s%(message)s",
60*55e87721SMatt Gilbride            reset=True,
61*55e87721SMatt Gilbride            log_colors={
62*55e87721SMatt Gilbride                "DEBUG": "cyan",
63*55e87721SMatt Gilbride                "INFO": "blue",
64*55e87721SMatt Gilbride                "WARNING": "yellow",
65*55e87721SMatt Gilbride                "ERROR": "red",
66*55e87721SMatt Gilbride                "CRITICAL": "red,bg_yellow",
67*55e87721SMatt Gilbride                "SUCCESS": "green",
68*55e87721SMatt Gilbride            },
69*55e87721SMatt Gilbride        )
70*55e87721SMatt Gilbride    else:
71*55e87721SMatt Gilbride        formatter = logging.Formatter(  # type: ignore
72*55e87721SMatt Gilbride            "%(asctime)s %(name)s [%(levelname)s] > %(message)s"
73*55e87721SMatt Gilbride        )
74*55e87721SMatt Gilbride
75*55e87721SMatt Gilbride    handler.setFormatter(formatter)
76*55e87721SMatt Gilbride    logger.addHandler(handler)
77*55e87721SMatt Gilbride    return logger
78*55e87721SMatt Gilbride
79*55e87721SMatt Gilbride
80*55e87721SMatt Gilbride_setup_logging()
81*55e87721SMatt Gilbridelogger = configure_logger("synthtool")
82*55e87721SMatt Gilbride
83*55e87721SMatt Gilbride
84*55e87721SMatt Gilbridedef success(*args, **kwargs):
85*55e87721SMatt Gilbride    logger.success(*args, **kwargs)
86*55e87721SMatt Gilbride
87*55e87721SMatt Gilbride
88*55e87721SMatt Gilbridedef debug(*args, **kwargs):
89*55e87721SMatt Gilbride    logger.debug(*args, **kwargs)
90*55e87721SMatt Gilbride
91*55e87721SMatt Gilbride
92*55e87721SMatt Gilbridedef info(*args, **kwargs):
93*55e87721SMatt Gilbride    logger.info(*args, **kwargs)
94*55e87721SMatt Gilbride
95*55e87721SMatt Gilbride
96*55e87721SMatt Gilbridedef warning(*args, **kwargs):
97*55e87721SMatt Gilbride    logger.warning(*args, **kwargs)
98*55e87721SMatt Gilbride
99*55e87721SMatt Gilbride
100*55e87721SMatt Gilbridedef error(*args, **kwargs):
101*55e87721SMatt Gilbride    logger.warning(*args, **kwargs)
102*55e87721SMatt Gilbride
103*55e87721SMatt Gilbride
104*55e87721SMatt Gilbridedef exception(*args, **kwargs):
105*55e87721SMatt Gilbride    logger.warning(*args, **kwargs)
106*55e87721SMatt Gilbride
107*55e87721SMatt Gilbride
108*55e87721SMatt Gilbridedef critical(*args, **kwargs):
109*55e87721SMatt Gilbride    logger.critical(*args, **kwargs)
110