Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from logging import (
DEBUG,
INFO,
FileHandler,
Formatter,
Logger,
StreamHandler,
getLogger,
)
from typing import Optional
# To avoid a creation of duplicates save an instance
_loggers = {}
def get_logger(
filename: Optional[str] = None, debug: bool = False, **kwargs
) -> Logger:
name = kwargs.pop("name", "PyGNA")
if logger := _loggers.get(name):
return logger
logger = getLogger("PyGNA")
formatstr = (
fmtstr
if (fmtstr := kwargs.pop("formatstr", False))
else "%(asctime)s - %(levelname)s - %(message)s"
)
level = DEBUG if debug else INFO
logger.setLevel(level)
formatter = Formatter(formatstr)
if filename:
fh = FileHandler(filename)
fh.setLevel(level)
fh.setFormatter(formatter)
logger.addHandler(fh)
if kwargs.pop("console", True):
ch = StreamHandler()
ch.setLevel(level)
ch.setFormatter(formatter)
logger.addHandler(ch)
_loggers[name] = logger
return logger