Personal Python logging and utilities library. Feel free to use it or don't, this saves me time copy-pasting the same code between projects. There are many like it, but this one is mine.
INFO,DEBUG, or automatic silent modetqdmloading bar support for async, threaded, or manual increments- Record objects for storing logs
- Misc. util objects like timers
pip install git+https://github.com/dlg1206/loggy.gitor add to requirements.txt
loggy @ git+https://github.com/dlg1206/loggy.gitimport loggy
loggy.info("Hello")
loggy.warn("Hello")
loggy.error("Hello")import loggy
from loggy import Level
loggy.set_log_level(Level.DEBUG)
loggy.debug_info("Hello")
loggy.debug_warn("Hello")
loggy.debug_error("Hello")
loggy.info("Hello")
loggy.warn("Hello")
loggy.error("Hello")All loggy output is silenced
import loggy
loggy.set_log_level(None)
print("foo")
loggy.debug_info("Hello")
loggy.debug_warn("Hello")
loggy.debug_error("Hello")
loggy.info("Hello")
loggy.warn("Hello")
loggy.error("Hello")
print("bar")Program immediately exits with a non-zero code
import loggy
print("foo")
loggy.fatal("goodbye")
print("bar")Concept is the same with async, just replace futures with coroutines
import time
from concurrent.futures import ThreadPoolExecutor
import loggy
def sleep() -> str:
time.sleep(1)
return "Awake!"
with ThreadPoolExecutor() as exe:
futures = [exe.submit(sleep) for _ in range(3)]
for f in loggy.threaded_data_queue(futures, description="sleeping", unit="zzz"):
result = f.result()
# do extra processing here
loggy.debug_info(result)
loggy.info("Done!")import time
from concurrent.futures import ThreadPoolExecutor
import loggy
from loggy import Level
loggy.set_log_level(Level.DEBUG) # <-- Set mode to debug
def sleep() -> str:
time.sleep(1)
return "Awake!"
with ThreadPoolExecutor() as exe:
futures = [exe.submit(sleep) for _ in range(3)]
for f in loggy.threaded_data_queue(futures, description="sleeping", unit="zzz"):
result = f.result()
# do extra processing here
loggy.debug_info(result)
loggy.info("Done!")Include additional details not embedded in the message, included by default. Supported by all methods
import loggy
loggy.info("Hello", foo=True, bar="bazz")
# Disable additional details
loggy.info("Hello", emit_details=False, foo=True, bar="bazz")Include exceptions in the details. Supported by warn, error, and fatal methods
import loggy
try:
raise RuntimeError("foobar")
except RuntimeError as e:
loggy.error(e)







