-
-
Save BlackHacked/ec3e0093d9d5fa310020bba8ed421d74 to your computer and use it in GitHub Desktop.
My Python Logger
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import loguru_logger | |
logger = loguru_logger.get_logger() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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