|
#!/usr/bin/env python |
|
|
|
# Copyright (c) 2017 Kurt Jacobson |
|
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy |
|
# of this software and associated documentation files (the "Software"), to deal |
|
# in the Software without restriction, including without limitation the rights |
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
# copies of the Software, and to permit persons to whom the Software is |
|
# furnished to do so, subject to the following conditions: |
|
|
|
# The above copyright notice and this permission notice shall be included in all |
|
# copies or substantial portions of the Software. |
|
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|
# SOFTWARE. |
|
|
|
from copy import copy |
|
from logging import Formatter |
|
|
|
MAPPING = { |
|
'DEBUG' : 37, # white |
|
'INFO' : 36, # cyan |
|
'WARNING' : 33, # yellow |
|
'ERROR' : 31, # red |
|
'CRITICAL': 41, # white on red bg |
|
} |
|
|
|
PREFIX = '\033[' |
|
SUFFIX = '\033[0m' |
|
|
|
class ColoredFormatter(Formatter): |
|
|
|
def __init__(self, patern): |
|
Formatter.__init__(self, patern) |
|
|
|
def format(self, record): |
|
colored_record = copy(record) |
|
levelname = colored_record.levelname |
|
seq = MAPPING.get(levelname, 37) # default white |
|
colored_levelname = ('{0}{1}m{2}{3}') \ |
|
.format(PREFIX, seq, levelname, SUFFIX) |
|
colored_record.levelname = colored_levelname |
|
return Formatter.format(self, colored_record) |
|
|
|
|
|
# ********* Example Usage ********* |
|
|
|
def demo(): |
|
|
|
import logging |
|
|
|
# Create logger |
|
log = logging.getLogger(__name__) |
|
|
|
# Add console handler |
|
ch = logging.StreamHandler() |
|
ch.setLevel(logging.DEBUG) |
|
cf = ColoredFormatter("[%(name)s][%(levelname)s] %(message)s (%(filename)s:%(lineno)d)") |
|
ch.setFormatter(cf) |
|
log.addHandler(ch) |
|
|
|
# Add file handler |
|
fh = logging.FileHandler('demo.log') |
|
fh.setLevel(logging.DEBUG) |
|
ff = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') |
|
fh.setFormatter(ff) |
|
log.addHandler(fh) |
|
|
|
# Set log level |
|
log.setLevel(logging.DEBUG) |
|
|
|
# Log some stuff |
|
log.debug("Logging demo has started") |
|
log.info("Logging to 'demo.log' in the script dir") |
|
log.warning("This is my last warning, take heed") |
|
log.error("This is an error") |
|
log.critical("He's dead, Jim") |
|
|
|
if __name__ == '__main__': |
|
demo() |
This comment has been minimized.
U have a version made via colorama perhaps? Since that won't work in standard CMD in Windows