(level: int = logging.INFO, log_colors: bool = True)
| 190 | |
| 191 | |
| 192 | def setup(level: int = logging.INFO, log_colors: bool = True) -> None: |
| 193 | colorama.init() |
| 194 | |
| 195 | color_out = log_colors and bool(sys.stdout) and sys.stdout.isatty() |
| 196 | color_err = log_colors and bool(sys.stderr) and sys.stderr.isatty() |
| 197 | |
| 198 | formatter = ColorFormatter(log_colors=color_out) |
| 199 | |
| 200 | console_info = LoggerHandler(sys.stdout) |
| 201 | console_info.setLevel(logging.INFO) |
| 202 | console_info.setFormatter(formatter) |
| 203 | console_info.addFilter(exclude_filter(logging.WARNING)) |
| 204 | |
| 205 | console_debug = LoggerHandler(sys.stdout) |
| 206 | console_debug.setLevel(logging.DEBUG) |
| 207 | console_debug.setFormatter(formatter) |
| 208 | console_debug.addFilter(exclude_filter(logging.INFO)) |
| 209 | |
| 210 | add_logging_level("TRACE", logging.DEBUG - 5) |
| 211 | |
| 212 | console_trace = LoggerHandler(sys.stdout) |
| 213 | console_trace.setLevel(logging.TRACE) # type: ignore[attr-defined] |
| 214 | console_trace.setFormatter(formatter) |
| 215 | console_trace.addFilter(exclude_filter(logging.DEBUG)) |
| 216 | |
| 217 | show_traceback = bool(os.environ.get("DVC_SHOW_TRACEBACK")) |
| 218 | err_formatter = ColorFormatter(log_colors=color_err, show_traceback=show_traceback) |
| 219 | console_errors = LoggerHandler(sys.stderr) |
| 220 | console_errors.setLevel(logging.WARNING) |
| 221 | console_errors.setFormatter(err_formatter) |
| 222 | |
| 223 | for name in ["dvc", "dvc_objects", "dvc_data"]: |
| 224 | logger = logging.getLogger(name) |
| 225 | logger.setLevel(level) |
| 226 | for handler in [console_info, console_debug, console_trace, console_errors]: |
| 227 | logger.addHandler(handler) |
| 228 | |
| 229 | if level >= logging.DEBUG: |
| 230 | # Unclosed session errors for asyncio/aiohttp are only available |
| 231 | # on the tracing mode for extensive debug purposes. They are really |
| 232 | # noisy, and this is potentially somewhere in the client library |
| 233 | # not managing their own session. Even though it is the best practice |
| 234 | # for them to do so, we can be assured that these errors raised when |
| 235 | # the object is getting deallocated, so no need to take any extensive |
| 236 | # action. |
| 237 | logging.getLogger("asyncio").setLevel(logging.CRITICAL) |
| 238 | logging.getLogger("aiohttp").setLevel(logging.CRITICAL) |
nothing calls this directly
no test coverage detected