Skip to content

Instantly share code, notes, and snippets.

@bryanchow
Last active August 4, 2022 22:54
Show Gist options
  • Save bryanchow/99301bff53911f2740bf63d1268c1538 to your computer and use it in GitHub Desktop.
Save bryanchow/99301bff53911f2740bf63d1268c1538 to your computer and use it in GitHub Desktop.
cronolog-style logging for Django using loguru
# 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