Skip to content

Commit

Permalink
GHI-#3 Implement the "logging.Logger(object)" class
Browse files Browse the repository at this point in the history
  • Loading branch information
arcticicestudio committed Jan 7, 2017
1 parent d0a3f32 commit 5a0d6bd
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
1 change: 1 addition & 0 deletions snowsaw/logging/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"""
Provides a custom logging class with level color support.
"""
from .logger import Logger
from .color import Color
from .level import Level
70 changes: 70 additions & 0 deletions snowsaw/logging/logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import sys

from ..util.singleton import Singleton
from ..util.compat import with_metaclass

from .color import Color
from .level import Level


class Logger(with_metaclass(Singleton, object)):
"""
A custom logging class with level color support.
"""
def __init__(self, level=Level.LOWINFO):
self.set_level(level)

def set_level(self, level):
self._level = level

def log(self, level, message):
if level >= self._level:
print("{}{}{}".format(self._color(level), message, self._reset()))

def debug(self, message):
self.log(Level.DEBUG, message)

def lowinfo(self, message):
self.log(Level.LOWINFO, message)

def info(self, message):
self.log(Level.INFO, message)

def warning(self, message):
self.log(Level.WARNING, message)

def error(self, message):
self.log(Level.ERROR, message)

def _color(self, level):
"""
Gets a color according to a level.
:param level: The level to get the color of
:return: The color of the specified level
"""
if not sys.stdout.isatty():
return ""
elif level < Level.DEBUG:
return ""
elif Level.DEBUG <= level < Level.LOWINFO:
return Color.MAGENTA
elif Level.LOWINFO <= level < Level.INFO:
return Color.BLUE
elif Level.INFO <= level < Level.WARNING:
return Color.GREEN
elif Level.WARNING <= level < Level.ERROR:
return Color.YELLOW
elif Level.ERROR <= level:
return Color.RED

def _reset(self):
"""
Gets a reset color.
:return: The reset color
"""
if not sys.stdout.isatty():
return ""
else:
return Color.RESET

0 comments on commit 5a0d6bd

Please sign in to comment.