From e01ceafc056f144771f9115689d33de31910b5de Mon Sep 17 00:00:00 2001 From: "xi.long" Date: Fri, 20 Dec 2019 16:44:06 +0800 Subject: [PATCH 1/5] colorful glog. --- glog.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/glog.py b/glog.py index 1aa0f75..d6eec7f 100644 --- a/glog.py +++ b/glog.py @@ -1,6 +1,7 @@ """A simple Google-style logging wrapper.""" import logging +import colorlog import time import traceback import os @@ -18,7 +19,7 @@ def format_message(record): return record_message -class GlogFormatter(logging.Formatter): +class GlogFormatter(colorlog.ColoredFormatter): LEVEL_MAP = { logging.FATAL: 'F', # FATAL is alias of CRITICAL logging.ERROR: 'E', @@ -28,7 +29,7 @@ class GlogFormatter(logging.Formatter): } def __init__(self): - logging.Formatter.__init__(self) + colorlog.ColoredFormatter.__init__(self, '%(log_color)s%(message)s%(reset)s') def format(self, record): try: @@ -45,7 +46,7 @@ def format(self, record): record.lineno, format_message(record)) record.getMessage = lambda: record_message - return logging.Formatter.format(self, record) + return colorlog.ColoredFormatter.format(self, record) logger = logging.getLogger() handler = logging.StreamHandler() From 7f989a37b41ed3baf6502c8731fb076311f57e4a Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 25 Dec 2019 15:13:16 +0800 Subject: [PATCH 2/5] save file to disk. --- glog.py | 55 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/glog.py b/glog.py index d6eec7f..b5c5a4d 100644 --- a/glog.py +++ b/glog.py @@ -5,7 +5,7 @@ import time import traceback import os - +import time import gflags as flags FLAGS = flags.FLAGS @@ -48,6 +48,7 @@ def format(self, record): record.getMessage = lambda: record_message return colorlog.ColoredFormatter.format(self, record) + logger = logging.getLogger() handler = logging.StreamHandler() @@ -57,8 +58,22 @@ def setLevel(newlevel): logger.debug('Log level set to %s', newlevel) +def setDirectory(directory): + if not os.path.exists(directory): + os.mkdir(directory) + + localtime = time.localtime() + filepath = directory + "/%04d%02d%02d-%02d%02d%02d.log" % ( + localtime.tm_year, localtime.tm_mon, localtime.tm_mday, localtime.tm_hour, localtime.tm_min, localtime.tm_sec) + fhandler = logging.FileHandler(filepath) + logger.addHandler(fhandler) + logger.debug('Log path set to %s' % filepath) + + def init(): setLevel(FLAGS.verbosity) + setDirectory(FLAGS.directory) + debug = logging.debug info = logging.info @@ -87,16 +102,16 @@ def init(): _level_letters = [name[0] for name in _level_names.values()] GLOG_PREFIX_REGEX = ( - r""" - (?x) ^ - (?P[%s]) - (?P\d\d)(?P\d\d)\s - (?P\d\d):(?P\d\d):(?P\d\d) - \.(?P\d{6})\s+ - (?P-?\d+)\s - (?P[a-zA-Z<_][\w._<>-]+):(?P\d+) - \]\s - """) % ''.join(_level_letters) + r""" + (?x) ^ + (?P[%s]) + (?P\d\d)(?P\d\d)\s + (?P\d\d):(?P\d\d):(?P\d\d) + \.(?P\d{6})\s+ + (?P-?\d+)\s + (?P[a-zA-Z<_][\w._<>-]+):(?P\d+) + \]\s + """) % ''.join(_level_letters) """Regex you can use to parse glog line prefixes.""" handler.setFormatter(GlogFormatter()) @@ -112,6 +127,7 @@ def Parse(self, arg): flags.BooleanFlag.Parse(self, arg) logging.captureWarnings(self.value) + flags.DEFINE_flag(CaptureWarningsFlag()) @@ -124,13 +140,14 @@ def Parse(self, arg): # Look up the name for this level (DEBUG, INFO, etc) if it exists try: level = logging._levelNames.get(intarg, intarg) - except AttributeError: # This was renamed somewhere b/w 2.7 and 3.4 + except AttributeError: # This was renamed somewhere b/w 2.7 and 3.4 level = logging._levelToName.get(intarg, intarg) except ValueError: level = arg setLevel(level) return level + flags.DEFINE( parser=VerbosityParser(), serializer=flags.ArgumentSerializer(), @@ -139,6 +156,20 @@ def Parse(self, arg): help='Logging verbosity') +class DirectoryParser(flags.ArgumentParser): + def Parse(self, arg): + setDirectory(arg) + return arg + + +flags.DEFINE( + parser=DirectoryParser(), + serializer=flags.ArgumentSerializer(), + name='logdir', + default=None, + help='The directory of log output.') + + # Define functions emulating C++ glog check-macros # https://htmlpreview.github.io/?https://github.com/google/glog/master/doc/glog.html#check From 0ec4f26fc3f469c2f0b0ac6027931012bf6e1ed9 Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 25 Dec 2019 15:21:10 +0800 Subject: [PATCH 3/5] add colorlog dependence to fix build failed. --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index e03f13e..400209c 100755 --- a/setup.py +++ b/setup.py @@ -14,6 +14,7 @@ url='https://github.com/benley/python-glog', install_requires=[ 'python-gflags>=3.1', + 'colorlog', 'six', # glog doesn't need six, but gflags 3.1 does and its distutils # "requires" line apparently accomplishes nothing, so ... ], From bba224f8ec1f973ce0ce8e76460d32122e08f308 Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 11 Feb 2020 17:23:15 +0800 Subject: [PATCH 4/5] fix bug with make log directory. --- glog.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/glog.py b/glog.py index b5c5a4d..693a80a 100644 --- a/glog.py +++ b/glog.py @@ -60,7 +60,7 @@ def setLevel(newlevel): def setDirectory(directory): if not os.path.exists(directory): - os.mkdir(directory) + os.makedirs(directory) localtime = time.localtime() filepath = directory + "/%04d%02d%02d-%02d%02d%02d.log" % ( diff --git a/setup.py b/setup.py index 400209c..5c54d2d 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ import os import setuptools -VERSION = '0.3.1' +VERSION = '0.3.2' README = open(os.path.join(os.path.dirname(__file__), 'README.rst')).read() From 369631d9d46a5131eec7c8f55444223d2dd3061f Mon Sep 17 00:00:00 2001 From: Boyue Li Date: Wed, 10 Jun 2020 17:58:41 -0400 Subject: [PATCH 5/5] Update Travis CI configuration Remove version 3.3, add newer versions. --- .travis.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index a8bad24..a6afdec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,11 +2,15 @@ language: python python: - "2.7" - - "3.3" - "3.4" - "3.5" - - "3.6-dev" # 3.6 development branch + - "3.6" + - "3.7" + - "3.8" + - "3.8-dev" -install: "pip install ." +install: + - pip install . -script: py.test +script: + - pytest