✨ New logging system
This commit is contained in:
25
src/logging/color_log_formatter.py
Normal file
25
src/logging/color_log_formatter.py
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
from logging import Formatter, LogRecord
|
||||||
|
|
||||||
|
|
||||||
|
class ColorLogFormatter(Formatter):
|
||||||
|
"""Formatter that outputs logs in a colored format"""
|
||||||
|
|
||||||
|
RESET = "\033[0m"
|
||||||
|
DIM = "\033[2m"
|
||||||
|
BOLD = "\033[1m"
|
||||||
|
RED = "\033[31m"
|
||||||
|
YELLOW = "\033[33m"
|
||||||
|
|
||||||
|
def format(self, record: LogRecord):
|
||||||
|
super_format = super().format(record)
|
||||||
|
match record.levelname:
|
||||||
|
case "CRITICAL":
|
||||||
|
return self.BOLD + self.RED + super_format + self.RESET
|
||||||
|
case "ERROR":
|
||||||
|
return self.RED + super_format + self.RESET
|
||||||
|
case "WARNING":
|
||||||
|
return self.YELLOW + super_format + self.RESET
|
||||||
|
case "DEBUG":
|
||||||
|
return self.DIM + super_format + self.RESET
|
||||||
|
case _other:
|
||||||
|
return super_format
|
||||||
58
src/logging/setup.py
Normal file
58
src/logging/setup.py
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
import logging.config as logging_dot_config
|
||||||
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from src import shared
|
||||||
|
|
||||||
|
|
||||||
|
def setup_logging():
|
||||||
|
"""Intitate the app's logging"""
|
||||||
|
|
||||||
|
# Prepare 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'
|
||||||
|
|
||||||
|
# Define log levels
|
||||||
|
profile_main_log_level = "DEBUG" if shared.PROFILE == "development" else "WARNING"
|
||||||
|
profile_lib_log_level = "INFO" if shared.PROFILE == "development" else "WARNING"
|
||||||
|
main_log_level = os.environ.get("LOGLEVEL", profile_main_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"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"handlers": {
|
||||||
|
"main_console_handler": {
|
||||||
|
"class": "logging.StreamHandler",
|
||||||
|
"formatter": "console_formatter",
|
||||||
|
"level": main_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"]},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
logging_dot_config.dictConfig(config)
|
||||||
18
src/main.py
18
src/main.py
@@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
@@ -40,6 +39,7 @@ from src.importer.sources.itch_source import ItchSource
|
|||||||
from src.importer.sources.legendary_source import LegendarySource
|
from src.importer.sources.legendary_source import LegendarySource
|
||||||
from src.importer.sources.lutris_source import LutrisSource
|
from src.importer.sources.lutris_source import LutrisSource
|
||||||
from src.importer.sources.steam_source import SteamSource
|
from src.importer.sources.steam_source import SteamSource
|
||||||
|
from src.logging.setup import setup_logging
|
||||||
from src.preferences import PreferencesWindow
|
from src.preferences import PreferencesWindow
|
||||||
from src.store.managers.display_manager import DisplayManager
|
from src.store.managers.display_manager import DisplayManager
|
||||||
from src.store.managers.file_manager import FileManager
|
from src.store.managers.file_manager import FileManager
|
||||||
@@ -257,20 +257,8 @@ class CartridgesApplication(Adw.Application):
|
|||||||
|
|
||||||
def main(version): # pylint: disable=unused-argument
|
def main(version): # pylint: disable=unused-argument
|
||||||
# Initiate logger
|
# Initiate logger
|
||||||
# (silence debug info from external libraries)
|
logging.basicConfig(level="DEBUG")
|
||||||
profile_base_log_level = "DEBUG" if shared.PROFILE == "development" else "WARNING"
|
setup_logging()
|
||||||
profile_lib_log_level = "INFO" if shared.PROFILE == "development" else "WARNING"
|
|
||||||
base_log_level = os.environ.get("LOGLEVEL", profile_base_log_level).upper()
|
|
||||||
lib_log_level = os.environ.get("LIBLOGLEVEL", profile_lib_log_level).upper()
|
|
||||||
log_levels = {
|
|
||||||
None: base_log_level,
|
|
||||||
"PIL": lib_log_level,
|
|
||||||
"urllib3": lib_log_level,
|
|
||||||
}
|
|
||||||
logging.basicConfig()
|
|
||||||
for logger, level in log_levels.items():
|
|
||||||
logging.getLogger(logger).setLevel(level)
|
|
||||||
|
|
||||||
# Start app
|
# Start app
|
||||||
app = CartridgesApplication()
|
app = CartridgesApplication()
|
||||||
return app.run(sys.argv)
|
return app.run(sys.argv)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ install_subdir('importer', install_dir: moduledir)
|
|||||||
install_subdir('importers', install_dir: moduledir)
|
install_subdir('importers', install_dir: moduledir)
|
||||||
install_subdir('utils', install_dir: moduledir)
|
install_subdir('utils', install_dir: moduledir)
|
||||||
install_subdir('store', install_dir: moduledir)
|
install_subdir('store', install_dir: moduledir)
|
||||||
|
install_subdir('logging', install_dir: moduledir)
|
||||||
install_data(
|
install_data(
|
||||||
[
|
[
|
||||||
'main.py',
|
'main.py',
|
||||||
|
|||||||
Reference in New Issue
Block a user