Skip to main content

Logging in JSON the easy way!

Project description

Noodle Logging - The tiny JSON logger for Python 3.x

Noodle Logging is a tiny package aimed at making logging from python applications into JSON easier.

Dependencies

  1. structlog
  2. python-json-logger
  3. six

Installation

pip3 install noodle-logging

Usage Examples

1. Basic logging
from noodle_logging.logger import log

def test():
    log.info("event", some_parameter=12, some_other_parameter="hello")

if __name__ == "__main__":
    test()
Output
{"message": "event", "some_parameter": 12, "some_other_parameter": "hello", "logger": "__main__", "level": "info", "timestamp": "2019-05-28T11:59:14.975823Z"}
2. High level Profiling - Using decorators
import time

from noodle_logging.decorators import profile

@profile
def some_method(*args, **kwargs):
    time.sleep(1)
    print(some_method.__name__, "method in execution with args ", args,
          " and kwargs ", kwargs)
    time.sleep(1)

if __name__ == "__main__":
    some_method(1, 2, 3, a=2, b=3)
Output
{"message": "Function Profiler", "fn_name": "some_method", "fn_id": "2df1335aa93f41438412da6b517a6781", "timestamp_start": 1559044955.3319192, "fn_args": "1,2,3", "fn_kwargs": "{\"a\": 2, \"b\": 3}", "logger": "noodle_logging.decorators", "level": "info", "timestamp": "2019-05-28T12:02:35.332396Z"}
>>> some_method method in execution with args  (1, 2, 3)  and kwargs  {'a': 2, 'b': 3}
{"message": "Function Profiler", "fn_name": "some_method", "fn_id": "2df1335aa93f41438412da6b517a6781", "timestamp_start": 1559044955.3319192, "fn_args": "1,2,3", "fn_kwargs": "{\"a\": 2, \"b\": 3}", "timestamp_end": 1559044957.340735, "exec_time": 2.0088157653808594, "logger": "noodle_logging.decorators", "level": "info", "timestamp": "2019-05-28T12:02:37.340991Z"}
3. Catching (and Logging) an exception - Using decorators
from noodle_logging.decorators import log_exceptions

@log_exceptions
def some_other_method(*args, **kwargs):
    print(some_other_method.__name__, "method in execution with args ",
          args, " and kwargs ", kwargs)
    print(1 / 0)
    # Below line will not be executed.
    print("Execution completed", some_other_method.__name__)

if __name__ == "__main__":
    some_other_method(1, 2, 3, a=2, b=3, c=4)
Output
some_other_method method in execution with args  (1, 2, 3)  and kwargs  {'a': 2, 'b': 3, 'c': 4}
{"message": "Exception Found.", "exception": "Traceback (most recent call last):\n  File \"/Users/askar.ali/Desktop/noodle-logging-original/noodle_logging/decorators.py\", line 48, in wrapper\n    return func(*args, **kwargs)\n  File \"run.py\", line 29, in some_other_method\n    print(1/0)\nZeroDivisionError: division by zero", "fn_args": "1,2,3", "fn_kwargs": "{\"a\": 2, \"b\": 3, \"c\": 4}", "logger": "noodle_logging.decorators", "level": "error", "timestamp": "2019-05-28T12:06:10.188581Z"}
Traceback (most recent call last):
  File "run.py", line 49, in <module>
    some_other_method(1, 2, 3, a=2, b=3, c=4)
  File "/Users/askar.ali/Desktop/noodle-logging-original/noodle_logging/decorators.py", line 48, in wrapper
    return func(*args, **kwargs)
  File "run.py", line 29, in some_other_method
    print(1/0)
ZeroDivisionError: division by zero
4. Profiling + Catching (and Logging) exceptions - Using decorators
from noodle_logging.decorators import profile, log_exceptions

@profile
@log_exceptions
def noodling_around(*args, **kwargs):
    print(noodling_around.__name__, "method in execution with args ",
          args, " and kwargs ", kwargs)
    print(1 / 0)
    # This line will not be executed.
    print("Execution completed", noodling_around.__name__)

if __name__ == "__main__":
    noodling_around(1, 2, 3, a=2, b=3, c=4)
Output
{"message": "Function Profiler", "fn_name": "noodling_around", "fn_id": "9a3e74924b77440c9a5f1fe4c05522e6", "timestamp_start": 1559045360.7205062, "fn_args": "1,2,3", "fn_kwargs": "{\"a\": 2, \"b\": 3, \"c\": 4}", "logger": "noodle_logging.decorators", "level": "info", "timestamp": "2019-05-28T12:09:20.720621Z"}
noodling_around method in execution with args  (1, 2, 3)  and kwargs  {'a': 2, 'b': 3, 'c': 4}
{"message": "Exception Found.", "exception": "Traceback (most recent call last):\n  File \"/Users/askar.ali/Desktop/noodle-logging-original/noodle_logging/decorators.py\", line 48, in wrapper\n    return func(*args, **kwargs)\n  File \"run.py\", line 41, in noodling_around\n    print(1 / 0)\nZeroDivisionError: division by zero", "fn_args": "1,2,3", "fn_kwargs": "{\"a\": 2, \"b\": 3, \"c\": 4}", "logger": "noodle_logging.decorators", "level": "error", "timestamp": "2019-05-28T12:09:20.721559Z"}
Traceback (most recent call last):
  File "run.py", line 50, in <module>
    noodling_around(1, 2, 3, a=2, b=3, c=4)
  File "/Users/askar.ali/Desktop/noodle-logging-original/noodle_logging/decorators.py", line 26, in wrapper
    result = func(*args, **kwargs)
  File "/Users/askar.ali/Desktop/noodle-logging-original/noodle_logging/decorators.py", line 48, in wrapper
    return func(*args, **kwargs)
  File "run.py", line 41, in noodling_around
    print(1 / 0)
ZeroDivisionError: division by zero

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for noodle-logging, version 0.2
Filename, size File type Python version Upload date Hashes
Filename, size noodle_logging-0.2-py3-none-any.whl (5.2 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size noodle-logging-0.2.tar.gz (3.8 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page