🎨 Improved logging code
- Silenced unwanted library messages - Logging to file with a max size of 8MB When the file size is passed, a backup of the file is created, and the file gets truncated. There can only be one current file and one backup file.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import logging
|
||||
import logging.config as logging_dot_config
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
from src import shared
|
||||
|
||||
@@ -8,51 +8,71 @@ from src import shared
|
||||
def setup_logging():
|
||||
"""Intitate the app's logging"""
|
||||
|
||||
# Prepare log file
|
||||
# Prepare the log file
|
||||
log_dir = shared.data_dir / "cartridges" / "logs"
|
||||
log_dir.mkdir(exist_ok=True)
|
||||
log_file = log_dir / f'{datetime.now().isoformat(timespec="seconds")}.log'
|
||||
log_file_path = log_dir / "cartridges.log"
|
||||
log_file_max_size_bytes = 8 * 10**6 # 8 MB
|
||||
|
||||
# Define log levels
|
||||
profile_main_log_level = "DEBUG" if shared.PROFILE == "development" else "WARNING"
|
||||
profile_app_log_level = "DEBUG" if shared.PROFILE == "development" else "INFO"
|
||||
profile_lib_log_level = "INFO" if shared.PROFILE == "development" else "WARNING"
|
||||
main_log_level = os.environ.get("LOGLEVEL", profile_main_log_level).upper()
|
||||
app_log_level = os.environ.get("LOGLEVEL", profile_app_log_level).upper()
|
||||
lib_log_level = os.environ.get("LIBLOGLEVEL", profile_lib_log_level).upper()
|
||||
|
||||
# Load config
|
||||
config = {
|
||||
"version": 1,
|
||||
"formatters": {
|
||||
"console_formatter": {
|
||||
"class": "src.logging.color_log_formatter.ColorLogFormatter",
|
||||
"format": "%(name)s %(levelname)s - %(message)s",
|
||||
},
|
||||
"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": {
|
||||
"main_console_handler": {
|
||||
"file_handler": {
|
||||
"class": "logging.handlers.RotatingFileHandler",
|
||||
"formatter": "file_formatter",
|
||||
"level": "DEBUG",
|
||||
"filename": log_file_path,
|
||||
"maxBytes": log_file_max_size_bytes,
|
||||
"backupCount": 1,
|
||||
},
|
||||
"app_console_handler": {
|
||||
"class": "logging.StreamHandler",
|
||||
"formatter": "console_formatter",
|
||||
"level": main_log_level,
|
||||
"level": app_log_level,
|
||||
},
|
||||
"lib_console_handler": {
|
||||
"class": "logging.StreamHandler",
|
||||
"formatter": "console_formatter",
|
||||
"level": lib_log_level,
|
||||
},
|
||||
"file_handler": {
|
||||
"class": "logging.FileHandler",
|
||||
"level": "DEBUG",
|
||||
"filename": str(log_file),
|
||||
"formatter": "file_formatter",
|
||||
},
|
||||
},
|
||||
"loggers": {
|
||||
"PIL": {"handlers": ["lib_console_handler", "file_handler"]},
|
||||
"urllib3": {"handlers": ["lib_console_handler", "file_handler"]},
|
||||
"root": {"handlers": ["main_console_handler", "file_handler"]},
|
||||
"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")
|
||||
|
||||
@@ -16,9 +16,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import json
|
||||
import logging
|
||||
import sys
|
||||
|
||||
import gi
|
||||
@@ -255,10 +253,7 @@ class CartridgesApplication(Adw.Application):
|
||||
scope.add_action(simple_action)
|
||||
|
||||
|
||||
def main(version): # pylint: disable=unused-argument
|
||||
# Initiate logger
|
||||
logging.basicConfig(level="DEBUG")
|
||||
def main(_version):
|
||||
setup_logging()
|
||||
# Start app
|
||||
app = CartridgesApplication()
|
||||
return app.run(sys.argv)
|
||||
|
||||
Reference in New Issue
Block a user