summaryrefslogtreecommitdiff
path: root/megapixels/app/utils/logger_utils.py
blob: d4f962eb5e04d616cb6dd7c8c56736ab19980d4e (plain)
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
"""
Logger instantiator for use with Click utlity scripts
"""
import sys
import os
import logging

import colorlog

from app.settings import app_cfg as cfg


class Logger:
  
  logger_name = 'app'

  def __init__(self):
    pass

  @staticmethod
  def create(verbosity=4, logfile=None):
    """Configures a logger from click params
    :param verbosity: (int) between 0 and 5
    :param logfile: (str) path to logfile
    :returns: logging root object
    """
    
    loglevel = (5 - (max(0, min(verbosity, 5)))) * 10 # where logging.DEBUG = 10
    date_format = '%Y-%m-%d %H:%M:%S'
    if 'colorlog' in sys.modules and os.isatty(2):
      cformat = '%(log_color)s' + cfg.LOGFILE_FORMAT
      f = colorlog.ColoredFormatter(cformat, date_format,
        log_colors = { 'DEBUG'   : 'yellow',       'INFO' : 'white',
        'WARNING' : 'bold_yellow', 'ERROR': 'bold_red',
        'CRITICAL': 'bold_red' })
    else:
      f = logging.Formatter(cfg.LOGFILE_FORMAT, date_format)
    
    # logger = logging.getLogger(Logger.logger_name)
    logger = logging.getLogger(cfg.LOGGER_NAME)
    logger.setLevel(loglevel)

    if logfile:
      # create file handler which logs even debug messages
      fh = logging.FileHandler(logfile)
      fh.setLevel(loglevel)
      logger.addHandler(fh)

    # add colored handler
    ch = logging.StreamHandler()
    ch.setFormatter(f)
    logger.addHandler(ch)

    if verbosity == 0:
      logger.disabled = True

    # test
    # logger.debug('Hello Debug')
    # logger.info('Hello Info')
    # logger.warn('Hello Warn')
    # logger.error('Hello Error')
    # logger.critical('Hello Critical')

    return logger

  @staticmethod
  def getLogger():
    return logging.getLogger(cfg.LOGGER_NAME)