Skip to content

declearn.utils.get_logger

Create or access a logging.Logger instance with pre-set handlers.

Parameters:

Name Type Description Default
name str

Name of the logger (used to create or retrieve it).

required
level int

Logging level below which messages are filtered out.

logging.INFO
fpath Optional[str]

Optional path to a utf-8 text file to which to append logged messages (in addition to stream display).

None
s_fmt Optional[str]

Optional format string applied to the handlers. If None, use the default format set by declearn.

None

Returns:

Name Type Description
logger logging.Logger

Retrieved or created Logger, with a StreamHandler, opt. a FileHandler, and possibly more (if pre-existing).

Source code in declearn/utils/_logging.py
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
def get_logger(
    name: str,
    level: int = logging.INFO,
    fpath: Optional[str] = None,
    s_fmt: Optional[str] = None,
) -> logging.Logger:
    """Create or access a logging.Logger instance with pre-set handlers.

    Parameters
    ----------
    name: str
        Name of the logger (used to create or retrieve it).
    level: int, default=logging.INFO
        Logging level below which messages are filtered out.
    fpath: str or None, default=None
        Optional path to a utf-8 text file to which to append
        logged messages (in addition to stream display).
    s_fmt: str or None, default=None
        Optional format string applied to the handlers.
        If None, use the default format set by declearn.

    Returns
    -------
    logger: logging.Logger
        Retrieved or created Logger, with a StreamHandler, opt.
        a FileHandler, and possibly more (if pre-existing).
    """
    # Create or access the logger. Set its filtering level.
    logger = logging.getLogger(name)
    logger.setLevel(level)
    # Create or update an associated stream handler using the proper format.
    formatter = logging.Formatter(s_fmt or DEFAULT_FORMAT)
    for handler in logger.handlers:
        if isinstance(handler, logging.StreamHandler):
            handler.setFormatter(formatter)
            break
    else:
        handler = logging.StreamHandler()
        handler.setFormatter(formatter)
        logger.addHandler(handler)
    # Optionally add a file handler, with similar formatting.
    if fpath:
        folder = os.path.dirname(os.path.abspath(fpath))
        os.makedirs(folder, exist_ok=True)
        handler = logging.FileHandler(fpath, mode="a", encoding="utf-8")
        handler.setFormatter(formatter)
        logger.addHandler(handler)
    # Return the logger instance.
    return logger