Django Log Lens is a dependency-free, lightweight, and easy-to-use logging app for Django. It provides an interface to supervise log data while also serving as a useful tool for debugging. As a unique feature, it allows clients to send console logs to the server out of the box, working with any frontend framework by simply adding a single line of code to include the required script.
Want to try it out? →Get started!
- Click on a path in the log message to copy it to the clipboard
- Click on the ↑ button to open the referenced line in VS Code
- Adjust the Path Splitter and the Path Prefix to match your project structure
Example:
Say, the remote project root is /web/my-project
(as in the example above) and your local project root is /home/user/MY-PROJECT
.
- Set the Path Prefix to
/home/user/MY-PROJECT
- Set the Path Splitter to
/my-project
→ Now, by clicking on the path
/web/my-project/django/dvenv/lib/python3.10/site-packages/django/http/request.py:151
,
/home/user/MY-PROJECT/django/dvenv/lib/python3.10/site-packages/django/http/request.py:151
will be opened by VS Code instead.
Allows clients to send console logs to the server.
<!DOCTYPE html>
<html>
...
<body>
{% csrf_token %}
<!-- it's not necessary to render the CSRF token more than once,
so if you use it anywhere in your template, you can skip the line above -->
{% include 'js-logger.html' %}
<!-- include the script to send console logs to the server.
It will simply override the console methods (debug, info, warn...) in a
way they behave the same as before but also send the logs to the server.
Thus, the script does not interfere with your frontend framework and
can be used out-of-the-box. -->
...
</body>
<script>
throw new Error("Hello, Django Log Lens!");
/* You will find this error, including its stack trace, in a log file
if you configured django log lens as described below. */
</script>
</html>
pip install django-log-lens
# file: settings.py
INSTALLED_APPS = [
'django_log_lens',
...
]
# file: urls.py
from django.urls import include
urlpatterns = [
path('logs/', include('django_log_lens.urls')),
...
]
Follow the instructions from the official Django documentation to configure the logging system or use the example below.
# file: settings.py
from django_log_lens import LOG_FORMAT
LOG_FOLDER = BASE_DIR / "logs"
if not os.path.exists(LOG_FOLDER):
os.makedirs(LOG_FOLDER)
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {"default": {"format": LOG_FORMAT}},
"handlers": {
"log_collector": {
"level": "WARNING",
"class": "logging.FileHandler",
"filename": str(LOG_FOLDER / "collector.log"),
"formatter": "default",
},
"client_logger": {
"level": "DEBUG",
"class": "logging.FileHandler",
"filename": str(LOG_FOLDER / "client.log"),
"formatter": "default",
},
},
"loggers": {
"django_log_lens.client": {"handlers": ["client_logger"], "level": "DEBUG", "propagate": True},
"django" : {"handlers": ["log_collector"], "level": "DEBUG", "propagate": True},
}
}
ALLOW_JS_LOGGING = DEBUG # it's recommendable not to allow client logging in production
You can now visit Django Log Lens by navigating to {% url 'django_log_lens:view' %}
(code for your template) -
if you configured the URL pattern as shown above, this would be logs/view
-
Why is are my logs not colored according to the log level?
Make sure to set the
LOG_FORMAT
in yoursettings.py
as shown in the example above. -
Can I use my own logging format?
Basically, yes. Just make sure prefix the loglevel to the log message as shown in the following example:
from django_log_lens import LEVEL_PREFIX MY_LOG_FORMAT = "%(levelname)s - %(message)s" # adjust to your needs MY_LOG_LENS_FORMAT = LEVEL_PREFIX + MY_LOG_FORMAT
This project uses the Dracula theme by Zeno Rocha which is licensed under the MIT License