File size: 1,874 Bytes
9411c06
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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
import logging
import sys

from typing import Union


def get_logger(
        name: str = None,
        level: Union[int, str] = None,
        log_path: str = None,
        is_stream: bool = False,
        format: str = None,
        *args,
        **kwargs,
) -> logging.Logger:
    """
    Get logger to keep logs the flow

    name:
        Name of logger
    level:
        Level of logger
    log_path:
        File contains logs
    is_stream:
        Log to console
    format:
        Format of message
    Return:
        logger
    """

    # refix name for logger
    if name is None:
        name = 'no_name'

    if level is None:
        level = logging.DEBUG
    elif isinstance(level, str):
        level = logging._nameToLevel.get(level, logging.DEBUG)

    # create logger
    logger = logging.getLogger(name=name)
    logger.setLevel(level=level)

    # create formatter
    if format is None:
        format = """%(asctime)s | %(name)s | %(levelname)s
            "%(filename)s", module %(module)s, line %(lineno)d in <%(funcName)s>
                --> %(message)s\
        """

    formater = logging.Formatter(fmt=format, datefmt="%m/%d/%Y, %H:%M:%S")

    # check present of handlers
    if not logger.handlers:
        # create stream handler if
        if is_stream:
            s_handler = logging.StreamHandler(stream=sys.stdout)
            s_handler.setLevel(level=level)
            s_handler.setFormatter(fmt=formater)
            logger.addHandler(hdlr=s_handler)

        # create file handler if
        if log_path is not None:
            f_handler = logging.FileHandler(
                filename=log_path,
                mode='a',
                encoding='utf-8',
            )
            f_handler.setLevel(level=level)
            f_handler.setFormatter(fmt=formater)
            logger.addHandler(hdlr=f_handler)

    return logger