File: logger.py

package info (click to toggle)
python-seqcluster 1.2.9%2Bds-3
  • links: PTS, VCS
  • area: contrib
  • in suites: bookworm
  • size: 113,624 kB
  • sloc: python: 5,308; makefile: 184; sh: 122; javascript: 55
file content (74 lines) | stat: -rw-r--r-- 2,594 bytes parent folder | download | duplicates (3)
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
import logging
try:
    from colorlog import ColoredFormatter
except:
    pass
import os


def getLogger(name):
    return logging.getLogger(__name__)

def set_format(frmt, frmt_col=None, datefmt=None):
    if frmt_col:
        try:
            formatter = ColoredFormatter(frmt_col, datefmt=datefmt)
            return formatter
        except:
            pass
    formatter = logging.Formatter(frmt)
    return formatter

def initialize_logger(output_dir, debug, level=False):
    NOTE = 15
    COLOR_FORMAT = "%(log_color)s%(asctime)s%(levelname)s-%(name)s(%(lineno)d)%(reset)s: %(message)s"
    COLOR_FORMAT_INFO = "%(log_color)s%(asctime)s %(levelname)s%(reset)s: %(message)s"
    DATE_FRT = '%m/%d/%Y %I:%M:%S %p'
    FORMAT = "%(levelname)s-%(name)s(%(lineno)d): %(message)s"
    FORMAT_INFO = "%(levelname)s %(message)s"
    logging.addLevelName(NOTE, "NOTE")
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)
    output_dir = os.path.join(output_dir, "log")
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)

    def note(self, message, *args, **kws):
        self.log(NOTE, message, *args, **kws)

    logging.Logger.note = note
    numeric_level = getattr(logging, "DEBUG", None)
    if not debug:
        numeric_level = getattr(logging, "INFO", None)
    logger = logging.getLogger()
    logger.setLevel(numeric_level)
    # create console handler and set level to info
    handler = logging.StreamHandler()
    handler.setLevel(logging.INFO)
    if level:
        handler.setLevel(logging.DEBUG)

    formatter = set_format(FORMAT_INFO, COLOR_FORMAT_INFO, datefmt=DATE_FRT)
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    # create error file handler and set level to error
    handler = logging.FileHandler(os.path.join(output_dir, "error.log"), "w", encoding=None, delay="true")
    handler.setLevel(logging.ERROR)
    formatter = set_format(FORMAT, COLOR_FORMAT, datefmt=DATE_FRT)
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    # create debug file handler and set level to debug
    handler = logging.FileHandler(os.path.join(output_dir, "run.log"), "w")
    handler.setLevel(numeric_level)
    formatter = logging.Formatter(FORMAT)
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    # create debug file handler and set level to debug
    handler = logging.FileHandler(os.path.join(output_dir, "trace.log"),"w")
    handler.setLevel(NOTE)
    formatter = logging.Formatter("%(levelname)s - %(message)s")
    handler.setFormatter(formatter)
    logger.addHandler(handler)