mirror of
https://github.com/hpcaitech/ColossalAI.git
synced 2025-04-27 19:36:13 +00:00
* [pre-commit.ci] pre-commit autoupdate updates: - [github.com/PyCQA/autoflake: v2.2.1 → v2.3.1](https://github.com/PyCQA/autoflake/compare/v2.2.1...v2.3.1) - [github.com/pycqa/isort: 5.12.0 → 5.13.2](https://github.com/pycqa/isort/compare/5.12.0...5.13.2) - [github.com/psf/black-pre-commit-mirror: 23.9.1 → 24.4.2](https://github.com/psf/black-pre-commit-mirror/compare/23.9.1...24.4.2) - [github.com/pre-commit/mirrors-clang-format: v13.0.1 → v18.1.7](https://github.com/pre-commit/mirrors-clang-format/compare/v13.0.1...v18.1.7) - [github.com/pre-commit/pre-commit-hooks: v4.3.0 → v4.6.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.3.0...v4.6.0) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
"""
|
|
Class for logging with extra control for debugging
|
|
"""
|
|
|
|
import logging
|
|
|
|
|
|
class ColossalQALogger:
|
|
"""This is a distributed event logger class essentially based on :class:`logging`.
|
|
|
|
Args:
|
|
name (str): The name of the logger.
|
|
|
|
Note:
|
|
Logging types: ``info``, ``warning``, ``debug`` and ``error``
|
|
"""
|
|
|
|
__instances = dict()
|
|
|
|
def __init__(self, name):
|
|
if name in ColossalQALogger.__instances:
|
|
raise ValueError("Logger with the same name has been created")
|
|
else:
|
|
self._name = name
|
|
self._logger = logging.getLogger(name)
|
|
|
|
ColossalQALogger.__instances[name] = self
|
|
|
|
@staticmethod
|
|
def get_instance(name: str):
|
|
"""Get the unique single logger instance based on name.
|
|
|
|
Args:
|
|
name (str): The name of the logger.
|
|
|
|
Returns:
|
|
DistributedLogger: A DistributedLogger object
|
|
"""
|
|
if name in ColossalQALogger.__instances:
|
|
return ColossalQALogger.__instances[name]
|
|
else:
|
|
logger = ColossalQALogger(name=name)
|
|
return logger
|
|
|
|
def info(self, message: str, verbose: bool = False) -> None:
|
|
"""Log an info message.
|
|
|
|
Args:
|
|
message (str): The message to be logged.
|
|
verbose (bool): Whether to print the message to stdout.
|
|
"""
|
|
if verbose:
|
|
logging.basicConfig(level=logging.INFO)
|
|
self._logger.info(message)
|
|
|
|
def warning(self, message: str, verbose: bool = False) -> None:
|
|
"""Log a warning message.
|
|
|
|
Args:
|
|
message (str): The message to be logged.
|
|
verbose (bool): Whether to print the message to stdout.
|
|
"""
|
|
if verbose:
|
|
self._logger.warning(message)
|
|
|
|
def debug(self, message: str, verbose: bool = False) -> None:
|
|
"""Log a debug message.
|
|
|
|
Args:
|
|
message (str): The message to be logged.
|
|
verbose (bool): Whether to print the message to stdout.
|
|
"""
|
|
if verbose:
|
|
self._logger.debug(message)
|
|
|
|
def error(self, message: str) -> None:
|
|
"""Log an error message.
|
|
|
|
Args:
|
|
message (str): The message to be logged.
|
|
"""
|
|
self._logger.error(message)
|
|
|
|
|
|
def get_logger(name: str = None, level=logging.INFO) -> ColossalQALogger:
|
|
"""
|
|
Get the logger by name, if name is None, return the default logger
|
|
"""
|
|
if name:
|
|
logger = ColossalQALogger.get_instance(name=name)
|
|
else:
|
|
logger = ColossalQALogger.get_instance(name="colossalqa")
|
|
return logger
|