import logging, time

class LogFormatter(logging.Formatter):
	def __init__(self, docolor, timestamps=False):
		super().__init__()
		self.docolor = docolor
		self.timestamps = timestamps

	def formatMessage(self, record):
		if self.docolor:
			c_lvl = 33
			c_mod = 32
			c_msg = 0

			if record.levelno == logging.WARNING:
				c_lvl = 31
				#c_mod = 33
				c_msg = 33

			elif record.levelno > logging.WARNING:
				c_lvl = 31
				c_mod = 31
				c_msg = 31

			fmt = '\x1b['+str(c_lvl)+'m%(levelname)8s\x1b[0m \x1b['+str(c_mod)+'m%(name)s\x1b['+str(c_msg)+'m: %(message)s\x1b[0m'
		else:
			fmt = '%(levelname)8s %(name)s: %(message)s'

		if self.timestamps:
			fmt = '%(asctime)s '+fmt

		if not 'asctime' in record.__dict__:
			record.__dict__['asctime']=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(record.__dict__['created']))

		return fmt % record.__dict__


class LogHandler(logging.StreamHandler):
	def __init__(self, docolor, timestamps):
		super().__init__()
		self.setFormatter(LogFormatter(docolor,timestamps))