Last active
August 4, 2022 22:54
-
-
Save bryanchow/99301bff53911f2740bf63d1268c1538 to your computer and use it in GitHub Desktop.
cronolog-style logging for Django using loguru
This file contains hidden or 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
# cronolog-style logging for Django using loguru | |
# https://gist.github.com/bryanchow/99301bff53911f2740bf63d1268c1538 | |
# Example usage: | |
# | |
# settings.py: | |
# CRONOLOGURU_ROOT = "/var/log/django" | |
# | |
# views.py: | |
# from cronologuru import get_logger | |
# user_logger = get_logger('users') | |
# user_logger.info("Logging to /var/log/django/yyyy/mm/dd-users.log") | |
import sys | |
import os | |
import copy | |
from loguru import logger | |
from django.conf import settings | |
CRONOLOGURU_ROOT = getattr(settings, 'CRONOLOGURU_ROOT', None) | |
CRONOLOGURU_FORMAT = getattr( | |
settings, 'CRONOLOGURU_FORMAT', "{time:YYYY}/{time:MM}/{time:DD}-[key].log" | |
) | |
CRONOLOGURU_LEVEL = getattr(settings, 'CRONOLOGURU_LEVEL', "INFO") | |
CRONOLOGURU_ROTATION = getattr(settings, 'CRONOLOGURU_ROTATION', "00:00") | |
logger.remove() | |
loggers = {} | |
def get_logger(key): | |
""" | |
Get the loguru.logger instance for the passed-in key. | |
""" | |
try: | |
return loggers[key] | |
except KeyError: | |
pass | |
new_logger = copy.deepcopy(logger) | |
loggers[key] = new_logger | |
if CRONOLOGURU_ROOT: | |
new_logger.add( | |
os.path.join( | |
CRONOLOGURU_ROOT, | |
CRONOLOGURU_FORMAT.replace("[key]", key) | |
), | |
level=CRONOLOGURU_LEVEL, | |
rotation=CRONOLOGURU_ROTATION | |
) | |
else: | |
new_logger.add(sys.stderr, level=CRONOLOGURU_LEVEL) | |
return new_logger |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment