Skip to content

Instantly share code, notes, and snippets.

@BlackHacked
Forked from azizulhakim-f/logger_driver.py
Created May 22, 2023 12:31
Show Gist options
  • Save BlackHacked/ec3e0093d9d5fa310020bba8ed421d74 to your computer and use it in GitHub Desktop.
Save BlackHacked/ec3e0093d9d5fa310020bba8ed421d74 to your computer and use it in GitHub Desktop.
My Python Logger
import loguru_logger
logger = loguru_logger.get_logger()
from logger_driver import logger
def test_logger():
print("...")
logger.trace("Trace Message")
logger.debug("Debug Message")
logger.info("Info Message")
print("...")
logger.success("Success Message")
logger.warning("Warning Message")
logger.error("Error Message")
print("...")
print("...")
try:
ch = "hello" + 2
except Exception as e:
logger.critical("Critical Message", e)
print("...")
try:
ch = "hello" + 2
except Exception:
logger.exception("exception")
print("...")
logger.trace("Trace Message")
logger.debug("Debug Message")
logger.info("Info Message")
print("end")
def divide(a, b):
return a / b
def divide_by_zero():
try:
divide(5, 0)
except ZeroDivisionError:
logger.exception("What?!")
def call_test_logger():
test_logger()
divide_by_zero()
call_test_logger()
import datetime
import sys
import stackprinter
from loguru import logger
class Formatter:
""" Formats The Log Message. Adds Stackprinter Trace If there is any Exception """
def __init__(self):
self.padding = 0
self.fmt = "<green>{time:YYYY-MM-DD HH:mm:ss.SS}</green> | <level>{level: <8}</level> | <cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>\n{exception}"
def format(self, record):
if record["exception"] is not None:
record["stackprinter"] = stackprinter.format(record["exception"], show_vals=False, add_summary=False)
return self.fmt + "<yellow><bold>Traceback (including code block)</bold></yellow>\n{stackprinter}\n"
return self.fmt
class Rotator:
""" Rotates The Log If Size Or Time Limit Crosses """
def __init__(self, *, size, at):
now = datetime.datetime.now()
self._size_limit = size
self._time_limit = now.replace(hour=at.hour, minute=at.minute, second=at.second)
if now >= self._time_limit:
self._time_limit += datetime.timedelta(days=1)
def should_rotate(self, message, file):
file.seek(0, 2)
if file.tell() + len(message) > self._size_limit:
return True
if message.record["time"].timestamp() > self._time_limit.timestamp():
self._time_limit += datetime.timedelta(days=1)
return True
return False
def get_logger():
""" Adds All the Customization to Default Loguru Logger """
logger.remove()
formatter = Formatter()
logger.add(
sys.stderr,
level="DEBUG",
format=formatter.format,
filter=None,
colorize=True,
serialize=False,
backtrace=True,
diagnose=True,
enqueue=False,
catch=True,
)
rotator = Rotator(size=5e8, at=datetime.time(0, 0, 0))
logger.add(
"file_{time:YYYY-MM-DD}.log",
level="INFO",
format=formatter.format,
filter=None,
colorize=None,
serialize=False,
backtrace=True,
diagnose=True,
enqueue=False,
catch=True,
rotation=rotator.should_rotate,
)
return logger
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment