From 5b9f342fb32485c78f584df2d82340f00340a2d4 Mon Sep 17 00:00:00 2001 From: Andrei Taranchenko Date: Sat, 10 Jul 2021 05:59:37 -0400 Subject: [PATCH] 0.9.3 --- CHANGELOG | 6 + Makefile | 4 +- README.md | 12 +- README.rst | 269 ------------------ assets/screen.png | Bin 0 -> 109594 bytes pyproject.toml | 4 +- siftlog/__init__.py | 106 +++++-- .../{test_color.py => test_json_color.py} | 29 +- siftlog/tests/test_log.py | 39 +-- siftlog/tests/test_plain_color.py | 72 +++++ 10 files changed, 208 insertions(+), 333 deletions(-) delete mode 100644 README.rst create mode 100644 assets/screen.png rename siftlog/tests/{test_color.py => test_json_color.py} (76%) create mode 100644 siftlog/tests/test_plain_color.py diff --git a/CHANGELOG b/CHANGELOG index 3adeb08..5b1697e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +v0.9.3 +===== +* Adding ColorPlainTextStreamHandler for easy-to-read colorized logs +* ColorJsonStreamHandler is the new ColorStreamHandler +* Fixing the caller location code (broken in Python 3.x migration) + v0.9.2 ===== * Log level JSON key was not being emphasized when color handler was on (broken in Python 3.x migration) diff --git a/Makefile b/Makefile index b5020c8..ddffd3c 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,6 @@ install: poetry install build: - poetry run mdToRst README.md > README.rst poetry build lint: @@ -16,5 +15,8 @@ lint: test: @poetry run nosetests +visual: + @poetry run nosetests -s + info: @poetry env info diff --git a/README.md b/README.md index ff259a9..e57e202 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ Sift Log - JSON logging adapter for Python (now in color) =============== +![](https://raw.githubusercontent.com/papito/siftlog-py/master/assets/screen.png) + ## Features * Tag log statements with arbitrary values for easier grouping and analysis * Add keyword arguments that are converted to JSON values @@ -50,7 +52,7 @@ logger.addHandler(handler) log = SiftLog(logger) ``` -In this fashion, you can direct the JSON logs to [any logging handler](https://docs.python.org/2/library/logging.handlers.html) +In this fashion, you can direct the JSON logs to [any logging handler](https://docs.python.org/2/library/logging.handlers.html). #### Color For enhanced flamboyancy, attach the `ColorStreamHandler` to your logger. The output will not have color if the logs @@ -66,11 +68,12 @@ logger.addHandler(handler) log = SiftLog(logger) ``` +For development, you can opt in to use `ColorPlainTextStreamHandler`, for logs that are easier to parse visually. + ##### Performance While the above should play, it's highly recommended that the color handler is only -attached conditionally for local development. Too many log statements could otherwise become -expensive in terms of CPU. +attached conditionally for local development. ##### Different colors @@ -148,6 +151,7 @@ SiftLog.log.MESSAGE = "MESSAGE" `Poetry` is used to manage the dependencies. Most things can be accessed via the Makefile, if you have Make installed. +Without Make, just inspect the Makefile for the available commands. # use the right Python poetry use path/to/python/3.8-ish @@ -157,5 +161,7 @@ Most things can be accessed via the Makefile, if you have Make installed. make install # run tests make test + # run visual tests (same as tests but with output) + make visual # formatting, linting, and type checking make lint diff --git a/README.rst b/README.rst deleted file mode 100644 index 61b62c6..0000000 --- a/README.rst +++ /dev/null @@ -1,269 +0,0 @@ -Sift Log - JSON logging adapter for Python (now in color) -=============== - -# Features -========== - -* Tag log statements with arbitrary values for easier grouping and analysis - -* Add keyword arguments that are converted to JSON values - -* Variable substitution - -* Specifies where log calls are made from - -* Meant to be used with core Python logging (formatters, handlers, etc) - -* Colorized logs on a console (POSIX only) - -* `TRACE` log level built-in - -# Examples -========== -### A simple log message -======================== - -```python - -log.info('Hello') - -``` - -`{"msg": "Hello", "time": "12-12-14 10:12:01 EST", "level": "INFO", "loc": "test:log_test:20"}` - -### Logging with tags -===================== - -```python - -log.debug('Creating new user', 'MONGO', 'STORAGE') - -``` - -`{"msg": "Creating new user", "time": "12-12-14 10:12:09 EST", "tags": ["MONGO", "STORAGE"], "level": "DEBUG", "loc": "test:log_test:20"}` - -### Appending more data -======================= - -```python - -log.debug('Some key', is_admin=True, username='papito') - -``` - -`{"msg": "Some key", "is*admin": true, "username": "papito", "time": "12-12-14 10:12:04 EST", "level": "DEBUG", "loc": "test:log*test:20"}` - -### String substitution -======================= - -```python - -log.debug('User "$username" admin? $is*admin', is*admin=False, username='fez') - -``` - -`{"msg": "User \"fez\" admin? False", "username": "fez", "is*admin": false, "time": "12-12-14 10:12:18 EST", "level": "DEBUG", "loc": "test:log*test:20"}` - - -# Setup -======= -### Logging to console -====================== - -```python - -import sys - -import logging - -from siftlog import SiftLog - -logger = logging.getLogger() - -logger.setLevel(logging.INFO) - -handler = logging.StreamHandler(sys.stdout) - -logger.addHandler(handler) - -log = SiftLog(logger) - -``` - -In this fashion, you can direct the JSON logs to `any logging handler `_ - -### Color -========= - -For enhanced flamboyancy, attach the `ColorStreamHandler` to your logger. The output will not have color if the logs - -are being output to a file, or on systems that are not POSIX (will not work on Windows for now). - -```python - -from siftlog import SiftLog, ColorStreamHandler - -logger = logging.getLogger() - -handler = ColorStreamHandler(sys.stdout) - -logger.addHandler(handler) - -log = SiftLog(logger) - -``` - -#### Performance -================ - -While the above should play, it's highly recommended that the color handler is only - -attached conditionally for local development. Too many log statements could otherwise become - -expensive in terms of CPU. - - -#### Different colors -===================== - -You can change font background, text color, and boldness: - -```python - -from siftlog import ColorStreamHandler - -handler = ColorStreamHandler(sys.stdout) - -handler.set_color( - - logging.DEBUG, bg=handler.WHITE, fg=handler.BLUE, bold=True - -) - -``` - -#### Supported colors -===================== - - * ColorStreamHandler.BLACK - - * ColorStreamHandler.RED - - * ColorStreamHandler.GREEN - - * ColorStreamHandler.YELLOW - - * ColorStreamHandler.BLUE - - * ColorStreamHandler.MAGENTA - - * ColorStreamHandler.CYAN - - * ColorStreamHandler.WHITE - -### Constants (re-occuring values) -================================== - -You can define constants that will appear in every single log message. This is useful, for example, if you'd like to log process PID and hostname with every log message (recommended). This is done upon log adapter initialization: - -```python - -import os - -from siftlog import SiftLog - -log = SiftLog(logger, pid=os.getpid(), env='INTEGRATION') - -``` - -`{"msg": "And here I am", "time": "12-12-14 11:12:24 EST", "pid": 37463, "env": "INTEGRATION", "level": "INFO"}` - - -### Custom time format -====================== - -```python - -log = SiftLog(logger) - -SiftLog.TIME_FORMAT = '%d-%m-%y %H:%m:%S %Z' - -``` - -Define the format as accepted by `time.strftime() `_](https://docs.python.org/2/library/time.html#time.strftime) - -### Custom location format -========================== - -```python - -log = SiftLog(logger) - -SiftLog.LOCATION*FORMAT = '$module:$method:$line*no' - -``` - -The format should be a string containing any of the following variables: - - * `$file` - - * `$line_no` - - * `$method` - - * `$module` - -### Custom core key names -========================= - -Core keys, such as `msg` and `level` can be overridden, if they clash with common keys you might be using. - -The following can be redefined: - - * SiftLog.MESSAGE (default `msg`) - - * SiftLog.LEVEL (default `level`) - - * SiftLog.LOCATION (default `loc`) - - * SiftLog.TAGS (default `tags`) - - * SiftLog.TIME (default `time`) - -As in: - -```python - -log = SiftLog(logger) - -SiftLog.log.MESSAGE = "MESSAGE" - -``` - -# Development flow -================== - -`Poetry` is used to manage the dependencies. - -Most things can be accessed via the Makefile, if you have Make installed. - - # use the right Python - - poetry use path/to/python/3.8\-ish - - # make sure correct Python is used - - make info - - # install dependencies - - make install - - # run tests - - make test - - # formatting, linting, and type checking - - make lint - diff --git a/assets/screen.png b/assets/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..dee52b6f58c0a4dd31f42b5981f712c358f6f9e3 GIT binary patch literal 109594 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 literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index 6c9b23f..67f1c68 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "siftlog-py" -version = "0.9.2" +version = "0.9.3" description = "Structured JSON logging" license = "MIT" @@ -11,7 +11,7 @@ authors = ["Andrei Taranchenko "] keywords = ["logging", "logs"] include = [ - "LICENSE", "README.rst" + "LICENSE", "README.md" ] packages = [ diff --git a/siftlog/__init__.py b/siftlog/__init__.py index 9b9f50e..0528295 100644 --- a/siftlog/__init__.py +++ b/siftlog/__init__.py @@ -1,4 +1,5 @@ import inspect +import itertools import json import logging import os @@ -18,8 +19,9 @@ class SiftLog(logging.LoggerAdapter): TIME = "time" TIME_FORMAT = "%d-%m-%y %H:%m:%S %Z" LOCATION_FORMAT = "$module:$method:$line_no" + TRACE = 5 # for typing convenience - def __init__(self, logger, **kwargs): + def __init__(self, logger: logging.Logger, **kwargs): super(SiftLog, self).__init__(logger, {}) self._constants = kwargs @@ -68,7 +70,8 @@ def get_caller_info(self): return Template(self.LOCATION_FORMAT).safe_substitute(caller) - def _get_caller_info(self): + @staticmethod + def _get_caller_info(): # pull the frames from the current stack, reversed, # since it's easier to find the first siftlog frame frames = [ @@ -76,10 +79,12 @@ def _get_caller_info(self): for idx, frm in enumerate(reversed(inspect.stack())) ] - # the first siftlog frame from back of the stack - siftlog_frame = next( - x for x in frames if lambda idx, f, m: m and m.__name__ != "siftlog" + # travel the stack from behind, looking for the first siftlog frame + res = itertools.dropwhile( + lambda frame: frame[2] and frame[2].__name__ != "siftlog", frames ) + # the first siftlog frame from back of the stack + siftlog_frame = next(res) # its index siftlog_frame_idx = siftlog_frame[0] @@ -179,6 +184,9 @@ class ColorStreamHandler(logging.StreamHandler): logging.CRITICAL: (RED, WHITE, True), } + csi = "\x1b[" + reset = "\x1b[0m" + @staticmethod def set_color(level=None, bg=None, fg=None, bold=False): assert level @@ -197,9 +205,6 @@ def set_color(level=None, bg=None, fg=None, bold=False): ColorStreamHandler._LEVEL_MAP[level] = (bg, fg, bold) - csi = "\x1b[" - reset = "\x1b[0m" - @property def is_tty(self): isatty = getattr(self.stream, "isatty", None) @@ -224,10 +229,7 @@ def emit(self, record): def output_colorized(self, message): self.stream.write(message) - # noinspection DuplicatedCode - def colorize(self, message, record): - json_rec = json.loads(message) - + def get_fabulous_params(self, record) -> List[str]: if record.levelno in self._LEVEL_MAP: # bold the JSON keys bg, fg, bold = self._LEVEL_MAP[record.levelno] @@ -240,26 +242,30 @@ def colorize(self, message, record): if bold: params.append("1") - if params: - if SiftLog.MESSAGE in json_rec: - msg = '"{0}": "{1}"'.format( - SiftLog.MESSAGE, json_rec[SiftLog.MESSAGE] - ) + return params + + return [] + + def make_fabulous(self, message, record): + json_rec = json.loads(message) + # bold the JSON keys + bold_params = ["1"] + + for key in json_rec.keys(): + if record.levelno in self._LEVEL_MAP and key == SiftLog.MESSAGE: + fabulous_params = self.get_fabulous_params(record) + if fabulous_params and SiftLog.MESSAGE in json_rec: + msg = '"{0}"'.format(json_rec[SiftLog.MESSAGE]) color_msg = "".join( - (self.csi, ";".join(params), "m", msg, self.reset) + (self.csi, ";".join(fabulous_params), "m", msg, self.reset) ) message = message.replace(msg, color_msg) - for key in json_rec.keys(): - if key in [SiftLog.MESSAGE]: - continue - - # bold the JSON keys - params: List[str] = ["1"] - - val = '"%s":' % key + val = '"{0}":'.format(key) color_val = ( - '"' + "".join((self.csi, ";".join(params), "m", key, self.reset)) + '":' + '"' + + "".join((self.csi, ";".join(bold_params), "m", key, self.reset)) + + '":' ) message = message.replace(val, color_val) @@ -271,5 +277,49 @@ def format(self, record): message = message.strip() lines = len(message.split("\n")) if lines == 1: - message = self.colorize(message, record) + message = self.make_fabulous(message, record) + return message + + +class ColorJsonStreamHandler(ColorStreamHandler): # alias + pass + + +class ColorPlainTextStreamHandler(ColorStreamHandler): + def make_fabulous(self, message, record): + json_rec: Dict[str, str] = json.loads(message) + fabulous_params: List[str] = self.get_fabulous_params(record) + + if fabulous_params and SiftLog.LEVEL in json_rec: + message = "".join( + ( + self.csi, + ";".join(fabulous_params), + "m", + json_rec[SiftLog.LEVEL], + self.reset, + ": ", + json_rec[SiftLog.MESSAGE], + ) + ) + + # bold the rest of the keys + bold_params: List[str] = ["1"] + for key, val in json_rec.items(): + if key in [SiftLog.LEVEL, SiftLog.MESSAGE]: + continue + + message += "".join( + ( + ", [", + self.csi, + ";".join(bold_params), + "m", + key, + self.reset, + "] ", + str(val), + ) + ) + return message diff --git a/siftlog/tests/test_color.py b/siftlog/tests/test_json_color.py similarity index 76% rename from siftlog/tests/test_color.py rename to siftlog/tests/test_json_color.py index b5dc832..934bb32 100644 --- a/siftlog/tests/test_color.py +++ b/siftlog/tests/test_json_color.py @@ -2,14 +2,15 @@ import sys import unittest -from siftlog import ColorStreamHandler, SiftLog +from siftlog import ColorJsonStreamHandler, SiftLog -class TestColor(unittest.TestCase): +# noinspection DuplicatedCode +class TestJsonColor(unittest.TestCase): def test_defaults(self): logger = logging.getLogger() - logger.setLevel(logging.TRACE) - handler = ColorStreamHandler(sys.stdout) + logger.setLevel(SiftLog.TRACE) + handler = ColorJsonStreamHandler(sys.stdout) logger.addHandler(handler) log = SiftLog(logger) @@ -22,8 +23,8 @@ def test_defaults(self): def test_changed_key_names(self): logger = logging.getLogger() - logger.setLevel(logging.TRACE) - handler = ColorStreamHandler(sys.stdout) + logger.setLevel(SiftLog.TRACE) + handler = ColorJsonStreamHandler(sys.stdout) logger.addHandler(handler) log = SiftLog(logger) SiftLog.MESSAGE = "m" @@ -40,28 +41,28 @@ def test_changed_key_names(self): log.critical("critical", "tag1", "tag2", key1="key1", key2="key2") def test_incorrect_usage(self): - handler = ColorStreamHandler(sys.stdout) + handler = ColorJsonStreamHandler(sys.stdout) - with self.assertRaises(RuntimeError) as cm: + with self.assertRaises(RuntimeError): handler.set_color("blah", bg=handler.GREEN, fg=handler.WHITE, bold=True) - with self.assertRaises(RuntimeError) as cm: + with self.assertRaises(RuntimeError): handler.set_color(logging.INFO, bg="bad", fg=handler.WHITE, bold=True) - with self.assertRaises(RuntimeError) as cm: + with self.assertRaises(RuntimeError): handler.set_color(logging.INFO, bg=handler.BLACK, fg="bad", bold=True) - with self.assertRaises(RuntimeError) as cm: + with self.assertRaises(RuntimeError): handler.set_color( logging.INFO, bg=handler.BLACK, fg=handler.WHITE, bold="bad" ) def test_correct_usage(self): - handler = ColorStreamHandler(sys.stdout) + handler = ColorJsonStreamHandler(sys.stdout) handler.set_color(logging.INFO, bg=handler.GREEN, fg=handler.WHITE, bold=True) - handler.set_color(logging.TRACE, bg=handler.CYAN, fg=handler.RED, bold=False) + handler.set_color(SiftLog.TRACE, bg=handler.CYAN, fg=handler.RED, bold=False) handler.set_color(logging.DEBUG, bg=handler.WHITE, fg=handler.BLUE, bold=True) logger = logging.getLogger() - logger.setLevel(logging.TRACE) + logger.setLevel(SiftLog.TRACE) logger.addHandler(handler) log = SiftLog(logger) diff --git a/siftlog/tests/test_log.py b/siftlog/tests/test_log.py index e96b3f5..82c7d7f 100644 --- a/siftlog/tests/test_log.py +++ b/siftlog/tests/test_log.py @@ -10,10 +10,11 @@ class TestLogger(unittest.TestCase): @classmethod def setUpClass(cls): - cls.logger = SiftLog(None) + cls.core_logger = logging.getLogger("siftlog_test") + cls.sift_logger = SiftLog(cls.core_logger) def test_arbitrary_constants(self): - logger = SiftLog(None, pid=12345, app="APP NAME") + logger = SiftLog(self.core_logger, pid=12345, app="APP NAME") res = json.loads(logger._get_log_stmt(logging.INFO, None)) self.assertEquals(res["pid"], 12345) @@ -21,35 +22,39 @@ def test_arbitrary_constants(self): def test_simple_log_statement(self): stmt = "simple log statement" - res = json.loads(self.logger._get_log_stmt(logging.DEBUG, stmt)) + res = json.loads(self.sift_logger._get_log_stmt(logging.DEBUG, stmt)) - self.assertEquals(res[self.logger.MESSAGE], stmt) + self.assertEquals(res[self.sift_logger.MESSAGE], stmt) def test_with_string_formatting(self): stmt = "simple log statement with variable $var" data = {"var": 1} - res = json.loads(self.logger._get_log_stmt(logging.DEBUG, stmt, **data)) + res = json.loads(self.sift_logger._get_log_stmt(logging.DEBUG, stmt, **data)) - self.assertEquals(res[self.logger.MESSAGE], Template(stmt).substitute(data)) + self.assertEquals( + res[self.sift_logger.MESSAGE], Template(stmt).substitute(data) + ) def test_tags(self): - res = self.logger._get_log_stmt(logging.DEBUG, "", "TAG1", "TAG2") + res = self.sift_logger._get_log_stmt(logging.DEBUG, "", "TAG1", "TAG2") res = json.loads(res) - self.assertEquals(len(res[self.logger.TAGS]), 2) + self.assertEquals(len(res[self.sift_logger.TAGS]), 2) def test_custom_adapter(self): - datetime_handler = lambda obj: ( - obj.isoformat() - if isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date) - else None - ) + def datetime_handler(obj): + + if isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date): + return obj.isoformat() + else: + return None class CustomAdapter(SiftLog): def to_json(self, data): return json.dumps(data, default=datetime_handler) - logger = CustomAdapter(None) + test_logger = logging.getLogger("siftlog_test") + logger = CustomAdapter(test_logger) res = logger._get_log_stmt( logging.DEBUG, "$created", created=datetime.datetime.now() @@ -58,10 +63,12 @@ def to_json(self, data): self.assertNotEquals(res[logger.LEVEL], "ERROR") def test_core_fields(self): - logger = SiftLog(None) + test_logger = logging.getLogger("siftlog_test") + logger = SiftLog(test_logger) logger.MESSAGE = "m" logger.LEVEL = "l" res = logger._get_log_stmt(logging.DEBUG, "") res = json.loads(res) self.assertTrue(logger.MESSAGE in res) - self.assertTrue(logger.LEVEL in res) + self.assertTrue(logger.MESSAGE in res) + self.assertTrue(logger.LOCATION in res) diff --git a/siftlog/tests/test_plain_color.py b/siftlog/tests/test_plain_color.py new file mode 100644 index 0000000..8768d1b --- /dev/null +++ b/siftlog/tests/test_plain_color.py @@ -0,0 +1,72 @@ +import logging +import sys +import unittest + +from siftlog import ColorPlainTextStreamHandler, SiftLog + +# noinspection DuplicatedCode + + +class TestPlainTextColor(unittest.TestCase): + def test_defaults(self): + logger = logging.getLogger() + logger.setLevel(SiftLog.TRACE) + handler = ColorPlainTextStreamHandler(sys.stdout) + logger.addHandler(handler) + log = SiftLog(logger) + + log.trace("trace", "tag1", "tag2", key1="key1", key2="key2") + log.debug("debug", "tag1", "tag2", key1="key1", key2="key2") + log.info("info", "tag1", "tag2", key1="key1", key2="key2") + log.warn("warn", "tag1", "tag2", key1="key1", key2="key2") + log.warning("warning", "tag1", "tag2", key1="key1", key2="key2") + log.critical("critical", "tag1", "tag2", key1="key1", key2="key2") + + def test_changed_key_names(self): + logger = logging.getLogger() + logger.setLevel(SiftLog.TRACE) + handler = ColorPlainTextStreamHandler(sys.stdout) + logger.addHandler(handler) + log = SiftLog(logger) + SiftLog.MESSAGE = "m" + SiftLog.LOC = "from" + SiftLog.LEVEL = "lvl" + SiftLog.TIME = "@" + SiftLog.TAGS = "t" + + log.trace("trace", "tag1", "tag2", key1="key1", key2="key2") + log.debug("debug", "tag1", "tag2", key1="key1", key2="key2") + log.info("info", "tag1", "tag2", key1="key1", key2="key2") + log.warn("warn", "tag1", "tag2", key1="key1", key2="key2") + log.warning("warning", "tag1", "tag2", key1="key1", key2="key2") + log.critical("critical", "tag1", "tag2", key1="key1", key2="key2") + + def test_incorrect_usage(self): + handler = ColorPlainTextStreamHandler(sys.stdout) + + with self.assertRaises(RuntimeError): + handler.set_color("blah", bg=handler.GREEN, fg=handler.WHITE, bold=True) + with self.assertRaises(RuntimeError): + handler.set_color(logging.INFO, bg="bad", fg=handler.WHITE, bold=True) + with self.assertRaises(RuntimeError): + handler.set_color(logging.INFO, bg=handler.BLACK, fg="bad", bold=True) + with self.assertRaises(RuntimeError): + handler.set_color( + logging.INFO, bg=handler.BLACK, fg=handler.WHITE, bold="bad" + ) + + def test_correct_usage(self): + handler = ColorPlainTextStreamHandler(sys.stdout) + + handler.set_color(logging.INFO, bg=handler.GREEN, fg=handler.WHITE, bold=True) + handler.set_color(SiftLog.TRACE, bg=handler.CYAN, fg=handler.RED, bold=False) + handler.set_color(logging.DEBUG, bg=handler.WHITE, fg=handler.BLUE, bold=True) + + logger = logging.getLogger() + logger.setLevel(SiftLog.TRACE) + logger.addHandler(handler) + log = SiftLog(logger) + + log.trace("trace", "tag1", "tag2", key1="key1", key2="key2") + log.debug("debug", "tag1", "tag2", key1="key1", key2="key2") + log.info("info", "tag1", "tag2", key1="key1", key2="key2")