"""Set of functions for logging messages.""" import sys import warnings from typing import Optional, Type from gym.utils import colorize DEBUG = 10 INFO = 20 WARN = 30 ERROR = 40 DISABLED = 50 min_level = 30 # Ensure DeprecationWarning to be displayed (#2685, #3059) warnings.filterwarnings("once", "", DeprecationWarning, module=r"^gym\.") def set_level(level: int): """Set logging threshold on current logger.""" global min_level min_level = level def debug(msg: str, *args: object): """Logs a debug message to the user.""" if min_level <= DEBUG: print(f"DEBUG: {msg % args}", file=sys.stderr) def info(msg: str, *args: object): """Logs an info message to the user.""" if min_level <= INFO: print(f"INFO: {msg % args}", file=sys.stderr) def warn( msg: str, *args: object, category: Optional[Type[Warning]] = None, stacklevel: int = 1, ): """Raises a warning to the user if the min_level <= WARN. Args: msg: The message to warn the user *args: Additional information to warn the user category: The category of warning stacklevel: The stack level to raise to """ if min_level <= WARN: warnings.warn( colorize(f"WARN: {msg % args}", "yellow"), category=category, stacklevel=stacklevel + 1, ) def deprecation(msg: str, *args: object): """Logs a deprecation warning to users.""" warn(msg, *args, category=DeprecationWarning, stacklevel=2) def error(msg: str, *args: object): """Logs an error message if min_level <= ERROR in red on the sys.stderr.""" if min_level <= ERROR: print(colorize(f"ERROR: {msg % args}", "red"), file=sys.stderr) # DEPRECATED: setLevel = set_level