Files
cartridges/src/logging/setup.py
GeoffreyCoulaud 68273d9217 🎨 Improved logging
- One unlimited log file per session
- Up to 3 session logs kept at any time
- Log compressed via lzma
2023-06-12 23:11:09 +02:00

74 lines
2.5 KiB
Python

import logging
import logging.config as logging_dot_config
import os
from src import shared
def setup_logging():
"""Intitate the app's logging"""
is_dev = shared.PROFILE == "development"
profile_app_log_level = "DEBUG" if is_dev else "INFO"
profile_lib_log_level = "INFO" if is_dev else "WARNING"
app_log_level = os.environ.get("LOGLEVEL", profile_app_log_level).upper()
lib_log_level = os.environ.get("LIBLOGLEVEL", profile_lib_log_level).upper()
log_filename = shared.data_dir / "cartridges" / "logs" / "cartridges.log.xz"
config = {
"version": 1,
"formatters": {
"file_formatter": {
"format": "%(asctime)s | %(name)s | %(levelname)s | %(message)s"
},
"console_formatter": {
"format": "%(name)s %(levelname)s - %(message)s",
"class": "src.logging.color_log_formatter.ColorLogFormatter",
},
},
"handlers": {
"file_handler": {
"class": "src.logging.session_file_handler.SessionFileHandler",
"formatter": "file_formatter",
"level": "DEBUG",
"filename": log_filename,
"backup_count": 2,
},
"app_console_handler": {
"class": "logging.StreamHandler",
"formatter": "console_formatter",
"level": app_log_level,
},
"lib_console_handler": {
"class": "logging.StreamHandler",
"formatter": "console_formatter",
"level": lib_log_level,
},
},
"loggers": {
"PIL": {
"handlers": ["lib_console_handler", "file_handler"],
"propagate": False,
"level": "NOTSET",
},
"urllib3": {
"handlers": ["lib_console_handler", "file_handler"],
"propagate": False,
"level": "NOTSET",
},
},
"root": {
"level": "NOTSET",
"handlers": ["app_console_handler", "file_handler"],
},
}
logging_dot_config.dictConfig(config)
# Inform of the logging behaviour
logging.info("Logging profile: %s", shared.PROFILE)
logging.info("Console logging level for application: %s", app_log_level)
logging.info("Console logging level for libraries: %s", lib_log_level)
logging.info("Use env vars LOGLEVEL, LIBLOGLEVEL to override")
logging.info("All message levels are written to the log file")