aboutsummaryrefslogtreecommitdiff
path: root/web_interface
diff options
context:
space:
mode:
authoruser@node5.net <user@node5.net>2025-12-07 21:43:04 +0100
committeruser@node5.net <user@node5.net>2025-12-07 21:43:04 +0100
commit20ba90699808e6d9a274171593ab22327cd8a613 (patch)
tree18b49771b267693e46779dfe75caa064fb89b91f /web_interface
parent7f37e43c940cdb7a9adf38021331a97cf7664b9b (diff)
Custom logging
Diffstat (limited to 'web_interface')
-rw-r--r--web_interface/drinks_machine/ColorLogFormatter.py60
-rw-r--r--web_interface/drinks_machine/settings.py39
2 files changed, 99 insertions, 0 deletions
diff --git a/web_interface/drinks_machine/ColorLogFormatter.py b/web_interface/drinks_machine/ColorLogFormatter.py
new file mode 100644
index 0000000..939d591
--- /dev/null
+++ b/web_interface/drinks_machine/ColorLogFormatter.py
@@ -0,0 +1,60 @@
+import logging
+
+
+class ColorFormatter(logging.Formatter):
+ grey = "\x1b[90;20m"
+ cyan = "\x1b[96;20m"
+ yellow = "\x1b[33;20m"
+ red = "\x1b[31;20m"
+ bold_red = "\x1b[31;1m"
+ reset = "\x1b[0m"
+ format = "%(asctime)s,%(msecs)03d %(levelname)-8s %(filename)s:%(lineno)d %(message)s"
+
+ FORMATS = {
+ logging.DEBUG: grey + format + reset,
+ logging.INFO: cyan + format + reset,
+ logging.WARNING: yellow + format + reset,
+ logging.ERROR: red + format + reset,
+ logging.CRITICAL: bold_red + format + reset,
+ }
+
+ def format(self, record):
+ log_fmt = self.FORMATS.get(record.levelno)
+ formatter = logging.Formatter(log_fmt)
+ formatted = formatter.format(record)
+ return formatted
+
+
+class SysLogColorFormatter(logging.Formatter):
+ grey = "\x1b[90;20m"
+ cyan = "\x1b[96;20m"
+ yellow = "\x1b[33;20m"
+ red = "\x1b[31;20m"
+ bold_red = "\x1b[31;1m"
+ reset = "\x1b[0m"
+ format = "%(levelname)-8s %(filename)s:%(lineno)d %(message)s"
+
+ FORMATS = {
+ logging.DEBUG: grey + format + reset,
+ logging.INFO: cyan + format + reset,
+ logging.WARNING: yellow + format + reset,
+ logging.ERROR: red + format + reset,
+ logging.CRITICAL: bold_red + format + reset,
+ }
+
+ def format(self, record):
+ log_fmt = self.FORMATS.get(record.levelno)
+ formatter = logging.Formatter(log_fmt)
+ formatted = formatter.format(record)
+ return formatted
+
+
+""" Example how to log in other modules:
+logger = logging.getLogger(__name__) # Instantiate a logger to be used in this module
+
+logger.debug("debug message")
+logger.info("info message")
+logger.warning("warning message")
+logger.error("error message")
+logger.critical("critical message")
+"""
diff --git a/web_interface/drinks_machine/settings.py b/web_interface/drinks_machine/settings.py
index b63d78f..aae7e99 100644
--- a/web_interface/drinks_machine/settings.py
+++ b/web_interface/drinks_machine/settings.py
@@ -12,6 +12,7 @@ https://docs.djangoproject.com/en/6.0/ref/settings/
from pathlib import Path
import os
+import sys
from django.core.management.utils import get_random_secret_key
@@ -147,3 +148,41 @@ STATIC_URL = '/static/'
#STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [BASE_DIR / "static"]
+LOGGING = {
+ "version": 1,
+ "disable_existing_loggers": False,
+ "handlers": {
+ "console": {
+ "stream": sys.stdout,
+ "class": "logging.StreamHandler",
+ "formatter": "verbose",
+ },
+ "syslog": {
+ "address": "/dev/log",
+ "class": "logging.handlers.SysLogHandler",
+ "formatter": "verbose",
+ },
+ },
+ "root": {
+ "handlers": ["console" if DEBUG is True else "syslog"],
+ "level": "DEBUG",
+ },
+ "loggers": {
+ "django": {
+ "handlers": ["console" if DEBUG is True else "syslog"],
+ "level": "INFO",
+ "propagate": False,
+ },
+ },
+ "formatters": {
+ "verbose": {
+ "()": (
+ "drinks_machine.ColorLogFormatter.ColorFormatter"
+ if DEBUG is True
+ else "drinks_machine.ColorLogFormatter.SysLogColorFormatter"
+ ),
+ "format": "{asctime:s} {levelname:8s} {filename}:{lineno:d} \t {message}",
+ "style": "{",
+ },
+ },
+}