Created
September 30, 2017 15:25
-
-
Save KurtJacobson/48e750701acec40c7161b5a2f79e6bfd to your computer and use it in GitHub Desktop.
SO Colored Logging Formatter Example files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# Copyright (c) 2017 Kurt Jacobson | |
# License: https://kcj.mit-license.org/@2017 | |
import logging | |
from colored_log import ColoredFormatter | |
# Create top level logger | |
log = logging.getLogger("main") | |
# Add console handler using our custom ColoredFormatter | |
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('app.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("app has started") | |
log.info("Logging to 'app.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") | |
# Import a sub-module | |
import sub_module |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# Copyright (c) 2017 Kurt Jacobson | |
# License: https://kcj.mit-license.org/@2017 | |
import logging | |
log = logging.getLogger('main.sub_module') | |
log.debug("Hello from the sub module") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
U have a version made via colorama perhaps? Since that won't work in standard CMD in Windows