Skip to content

Instantly share code, notes, and snippets.

@david0
Created September 22, 2022 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save david0/b63e147f1a9e5f7bf1aa0b4b70e83361 to your computer and use it in GitHub Desktop.
Save david0/b63e147f1a9e5f7bf1aa0b4b70e83361 to your computer and use it in GitHub Desktop.
Script for formatting logstash logs in a human readable manner
#!/usr/bin/env python3 -u
import json
import fileinput
class Terminal(object):
FG_RED = "\033[31m"
FG_YELLOW = "\033[33m"
BOLD = "\033[1m"
DIM = "\033[2m"
NORMAL = "\033[0m"
def first_key(data, keys):
for key in keys:
if key in data:
return data[key]
def message_color(level):
if level.upper().startswith('E'):
return Terminal.FG_RED
elif level.upper().startswith('W'):
return Terminal.FG_YELLOW
return ''
jsondata = None
for line in fileinput.input():
if line.startswith("{"):
jsondata = line
elif jsondata is not None:
jsondata += line
if line.strip().endswith("}"):
data = json.loads(jsondata)
timestamp = first_key(data, ["@timestamp", '@timestamp', 't', 'ts'])
level = first_key(data, ['level', 's'])
print(Terminal.DIM, timestamp, Terminal.NORMAL, message_color(level), first_key(data, ["message", "msg"]), Terminal.NORMAL)
if "stack_trace" in data:
print(data["stack_trace"])
if "stacktrace" in data:
for line in data["stacktrace"]:
print("\t", line)
jsondata = None
elif jsondata is None:
print(line, end='')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment