Browse Source

Use colored logging with termcolor

Kentaro Wada 6 năm trước cách đây
mục cha
commit
3df5e79752

+ 0 - 4
labelme/__init__.py

@@ -15,10 +15,6 @@ PY2 = sys.version[0] == '2'
 PY3 = sys.version[0] == '3'
 del sys
 
-logging.basicConfig(level=logging.INFO)
-logger = logging.getLogger(__appname__)
-del logging
-
 
 from labelme._version import __version__
 

+ 1 - 1
labelme/app.py

@@ -20,7 +20,7 @@ from labelme import QT5
 from labelme.config import get_config
 from labelme.label_file import LabelFile
 from labelme.label_file import LabelFileError
-from labelme import logger
+from labelme.logger import logger
 from labelme.shape import DEFAULT_FILL_COLOR
 from labelme.shape import DEFAULT_LINE_COLOR
 from labelme.shape import Shape

+ 1 - 4
labelme/cli/draw_label_png.py

@@ -1,17 +1,14 @@
 import argparse
-import logging
 
 import matplotlib.pyplot as plt
 import numpy as np
 import PIL.Image
 
+from labelme.logger import logger
 from labelme import utils
 
 
 def main():
-    logger = logging.Logger('labelme')
-    logger.setLevel(logging.INFO)
-
     parser = argparse.ArgumentParser(
         formatter_class=argparse.ArgumentDefaultsHelpFormatter)
     parser.add_argument('label_png', help='label PNG file')

+ 1 - 1
labelme/cli/json_to_dataset.py

@@ -8,7 +8,7 @@ import warnings
 import PIL.Image
 import yaml
 
-from .. import logger
+from ..logger import logger
 from .. import utils
 
 

+ 1 - 1
labelme/cli/on_docker.py

@@ -10,7 +10,7 @@ import shlex
 import subprocess
 import sys
 
-from labelme import logger
+from labelme.logger import logger
 
 
 def get_ip():

+ 1 - 1
labelme/config/__init__.py

@@ -3,7 +3,7 @@ import shutil
 
 import yaml
 
-from labelme import logger
+from labelme.logger import logger
 
 
 here = osp.dirname(osp.abspath(__file__))

+ 4 - 4
labelme/label_file.py

@@ -2,10 +2,10 @@ import base64
 import json
 import os.path
 
-from . import logger
-from . import PY2
-from . import utils
-from ._version import __version__
+from labelme._version import __version__
+from labelme.logger import logger
+from labelme import PY2
+from labelme import utils
 
 
 class LabelFileError(Exception):

+ 51 - 0
labelme/logger.py

@@ -0,0 +1,51 @@
+import logging
+
+import termcolor
+
+from . import __appname__
+
+
+COLORS = {
+    'WARNING': 'yellow',
+    'INFO': 'white',
+    'DEBUG': 'blue',
+    'CRITICAL': 'red',
+    'ERROR': 'red',
+}
+
+
+class ColoredFormatter(logging.Formatter):
+
+    def __init__(self, msg, use_color=True):
+        logging.Formatter.__init__(self, msg)
+        self.use_color = use_color
+
+    def format(self, record):
+        levelname = record.levelname
+        if self.use_color and levelname in COLORS:
+            colored_levelname = termcolor.colored(
+                '[{}]'.format(levelname), color=COLORS[levelname]
+            )
+            record.levelname = colored_levelname
+        return logging.Formatter.format(self, record)
+
+
+class ColoredLogger(logging.Logger):
+
+    fmt_filename = termcolor.colored('%(filename)s', attrs={'bold': True})
+    FORMAT = '%(levelname)s %(message)s ({}:%(lineno)d)'.format(fmt_filename)
+
+    def __init__(self, name):
+        logging.Logger.__init__(self, name, logging.INFO)
+
+        color_formatter = ColoredFormatter(self.FORMAT)
+
+        console = logging.StreamHandler()
+        console.setFormatter(color_formatter)
+
+        self.addHandler(console)
+        return
+
+
+logging.setLoggerClass(ColoredLogger)
+logger = logging.getLogger(__appname__)

+ 1 - 1
labelme/main.py

@@ -9,7 +9,7 @@ from labelme import __appname__
 from labelme import __version__
 from labelme.app import MainWindow
 from labelme.config import get_config
-from labelme import logger
+from labelme.logger import logger
 from labelme.utils import newIcon
 
 

+ 1 - 1
labelme/utils/_io.py

@@ -3,7 +3,7 @@ import os.path as osp
 import numpy as np
 import PIL.Image
 
-from labelme import logger
+from labelme.logger import logger
 from labelme.utils.draw import label_colormap
 
 

+ 1 - 1
labelme/utils/shape.py

@@ -4,7 +4,7 @@ import numpy as np
 import PIL.Image
 import PIL.ImageDraw
 
-from labelme import logger
+from labelme.logger import logger
 
 
 def polygons_to_mask(img_shape, polygons, shape_type=None):

+ 1 - 1
labelme/widgets/label_dialog.py

@@ -5,7 +5,7 @@ from qtpy import QtWidgets
 
 QT5 = QT_VERSION[0] == '5'  # NOQA
 
-from labelme import logger
+from labelme.logger import logger
 import labelme.utils
 
 

+ 1 - 0
setup.py

@@ -36,6 +36,7 @@ install_requires = [
     'Pillow>=2.8.0',
     'PyYAML',
     'qtpy',
+    'termcolor',
 ]
 
 # Find python binding for qt with priority: