From 8c4c3f2e6639ef7b61d3581b35950a8a60e50a47 Mon Sep 17 00:00:00 2001 From: Sascha Ohms Date: Mon, 15 Apr 2019 12:50:37 +0200 Subject: [PATCH] initial commit --- README.md | 18 +++++++++++++++++ glogger/__init__.py | 49 +++++++++++++++++++++++++++++++++++++++++++++ setup.cfg | 2 ++ setup.py | 23 +++++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 README.md create mode 100644 glogger/__init__.py create mode 100644 setup.cfg create mode 100644 setup.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..104f7b6 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# glogger + +A python library for logging loguru messages straight to a gelf instance, for example Sematext via HTTP + +## Install glogger + +Simply install it via pip: `pip install git+https://github.com/fino-digital/glogger.git` + +## Getting started +Make sure the following environment variables have been set: `ENVIRONMENT`, `LOGGING_URL` and `LOG_FACILITY` + +```python +from glogger import logger + +logger.info('go') +logger.bind(custom='field').info('yay') +``` + diff --git a/glogger/__init__.py b/glogger/__init__.py new file mode 100644 index 0000000..01665c2 --- /dev/null +++ b/glogger/__init__.py @@ -0,0 +1,49 @@ +import json +import os +import threading + +import requests +from loguru import logger + +LOGGING_URL = os.getenv("LOGGING_URL", "") + "glogger" +s = requests.Session() + + +def send_as_gelf(record): + k = json.loads(record) + data = { + "message": k["record"]["message"], + "severity": k["record"]["level"]["name"], + "level": k["record"]["level"]["no"], + "thread": k["record"]["thread"]["name"], + "timestamp": k["record"]["time"]["timestamp"], + "source_name": k["record"]["file"]["path"] + ":" + k["record"]["module"], + "source_line_number": k["record"]["line"], + "source_method_name": k["record"]["function"], + } + for k, v in k["record"]["extra"].items(): + data[k] = v + + s.post(LOGGING_URL, json=data) + + +class Gelf: + def write(self, record): + if "LOGGING_URL" not in os.environ: + return + t = threading.Thread(target=send_as_gelf, args=[record]) + t.daemon = True + t.start() + + +logger.add(sink=Gelf(), serialize=True) + +if "ENVIRONMENT" in os.environ: + logger = logger.bind(environment=os.getenv("ENVIRONMENT")) +else: + logger.warning("ENVIRONMENT not configured") + +if "LOG_FACILITY" in os.environ: + logger = logger.bind(facility=os.getenv("LOG_FACILITY")) +else: + logger.warning("LOG_FACILITY not configured") diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..b88034e --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[metadata] +description-file = README.md diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..a60f64d --- /dev/null +++ b/setup.py @@ -0,0 +1,23 @@ +import setuptools + +with open("README.md", "r") as fh: + long_description = fh.read() +setuptools.setup( + name='glogger', + version='1.0.0', + description="A python library for logging loguru messages straight to a gelf instance, for example Sematext via HTTP", + long_description=long_description, + long_description_content_type="text/markdown", + url="https://github.com/fino-digital/glogger", + packages=setuptools.find_packages(), + classifiers=[ + "Programming Language :: Python :: 3.7", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], + python_requires='>=3.6', + install_requires=[ + "requests", + "loguru" + ] +)