Projekt

Obecné

Profil

Stáhnout (2.49 KB) Statistiky
| Větev: | Tag: | Revize:
1 1bdc90c0 David Friesecký
import inspect
2 dbca269d David Friesecký
import logging
3 5678036c David Friesecký
from logging import handlers
4
import os
5 1bdc90c0 David Friesecký
from pathlib import Path
6 dbca269d David Friesecký
7 5678036c David Friesecký
from src.config.configuration import Configuration, LOG_LEVEL_MAPPING
8
from src.constants import LOG_NAME, LOG_DIR, LOG_FILENAME, LOG_FORMAT
9
from src.utils.file_anchor import FileAnchor
10
11
12
def configure_logging(config: Configuration):
13
    if not os.path.exists(FileAnchor(config.root_dir, LOG_DIR).shortest_relative_path()):
14
        os.makedirs(FileAnchor(config.root_dir, LOG_DIR).shortest_relative_path())
15
16
    handler = logging.handlers.TimedRotatingFileHandler(
17
        os.path.join(FileAnchor(config.root_dir, LOG_DIR).shortest_relative_path(), LOG_FILENAME),
18
        when='H', interval=1)
19
    formatter = logging.Formatter(LOG_FORMAT)
20
    handler.setFormatter(formatter)
21
22
    # set log level based on config file
23
    app_logger = logging.getLogger(LOG_NAME)
24
    app_logger.setLevel(LOG_LEVEL_MAPPING.get(config.log_level, logging.DEBUG))
25
26
    app_logger.addHandler(handler)
27
28
    log = logging.getLogger('werkzeug')
29
    log.disabled = True
30 ed35ce72 David Friesecký
31 dbca269d David Friesecký
32
class Logger:
33
34
    @staticmethod
35 1bdc90c0 David Friesecký
    def get_names():
36
        stack = inspect.stack()
37 ca436714 David Friesecký
38
        file_name = inspect.getmodule(inspect.stack()[2][0]).__file__
39
        class_name = ""
40
        if "self" in stack[2][0].f_locals:
41
            class_name = stack[2][0].f_locals["self"].__class__.__name__ + "."
42 1bdc90c0 David Friesecký
        function_name = stack[2][0].f_code.co_name
43
44
        return file_name, class_name, function_name
45
46
    @staticmethod
47
    def debug(message: str):
48
        names = Logger.get_names()
49 ed35ce72 David Friesecký
        app_logger = logging.getLogger(LOG_NAME)
50
        app_logger.debug(f'{Path(names[0]).name}[{names[1]}{names[2]}()]: {message}')
51 dbca269d David Friesecký
52
    @staticmethod
53 1bdc90c0 David Friesecký
    def info(message: str):
54
        names = Logger.get_names()
55 ed35ce72 David Friesecký
        app_logger = logging.getLogger(LOG_NAME)
56
        app_logger.info(f'{Path(names[0]).name}[{names[1]}{names[2]}()]: {message}')
57 dbca269d David Friesecký
58
    @staticmethod
59 1bdc90c0 David Friesecký
    def warning(message: str):
60
        names = Logger.get_names()
61 ed35ce72 David Friesecký
        app_logger = logging.getLogger(LOG_NAME)
62
        app_logger.warning(f'{Path(names[0]).name}[{names[1]}{names[2]}()]: {message}')
63 dbca269d David Friesecký
64
    @staticmethod
65 1bdc90c0 David Friesecký
    def error(message: str):
66
        names = Logger.get_names()
67 ed35ce72 David Friesecký
        app_logger = logging.getLogger(LOG_NAME)
68
        app_logger.error(f'{Path(names[0]).name}[{names[1]}.{names[2]}()]: {message}')
69 dbca269d David Friesecký
70
    @staticmethod
71 1bdc90c0 David Friesecký
    def critical(message: str):
72
        names = Logger.get_names()
73 ed35ce72 David Friesecký
        app_logger = logging.getLogger(LOG_NAME)
74
        app_logger.critical(f'{Path(names[0]).name}[{names[1]}.{names[2]}()]: {message}')