1"""
2Custom log output
3"""
4
5import sys
6import logging
7
8TEXT_NORMAL = 0
9TEXT_BOLD = 1
10TEXT_RED = 31
11TEXT_GREEN = 32
12TEXT_YELLOW = 33
13TEXT_BLUE = 34
14TEXT_MAGENTA = 35
15TEXT_CYAN = 36
16
17
18def get_logger():
19    return logging.getLogger('exifread')
20
21
22def setup_logger(debug, color):
23    """Configure the logger."""
24    if debug:
25        log_level = logging.DEBUG
26    else:
27        log_level = logging.INFO
28
29    logger = logging.getLogger('exifread')
30    stream = Handler(log_level, debug, color)
31    logger.addHandler(stream)
32    logger.setLevel(log_level)
33
34
35class Formatter(logging.Formatter):
36
37    def __init__(self, debug=False, color=False):
38        self.color = color
39        self.debug = debug
40        if self.debug:
41            log_format = '%(levelname)-6s %(message)s'
42        else:
43            log_format = '%(message)s'
44        logging.Formatter.__init__(self, log_format)
45
46    def format(self, record):
47        if self.debug and self.color:
48            if record.levelno >= logging.CRITICAL:
49                color = TEXT_RED
50            elif record.levelno >= logging.ERROR:
51                color = TEXT_RED
52            elif record.levelno >= logging.WARNING:
53                color = TEXT_YELLOW
54            elif record.levelno >= logging.INFO:
55                color = TEXT_GREEN
56            elif record.levelno >= logging.DEBUG:
57                color = TEXT_CYAN
58            else:
59                color = TEXT_NORMAL
60            record.levelname = "\x1b[%sm%s\x1b[%sm" % (color, record.levelname, TEXT_NORMAL)
61        return logging.Formatter.format(self, record)
62
63
64class Handler(logging.StreamHandler):
65
66    def __init__(self, log_level, debug=False, color=False):
67        self.color = color
68        self.debug = debug
69        logging.StreamHandler.__init__(self, sys.stdout)
70        self.setFormatter(Formatter(debug, color))
71        self.setLevel(log_level)
72"""
73    def emit(self, record):
74        record.msg = "\x1b[%sm%s\x1b[%sm" % (TEXT_BOLD, record.msg, TEXT_NORMAL)
75        logging.StreamHandler.emit(self, record)
76"""