1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-13 15:57:14 +03:00

Implement a TRACE level of logging.

For things that are too spammy for DEBUG, but we might need them
sometimes.
This commit is contained in:
Athanasius 2020-09-23 15:58:19 +01:00
parent d8ea6a0a94
commit 46e3b3aff8
3 changed files with 68 additions and 9 deletions

View File

@ -44,6 +44,17 @@ from config import appcmdname, appname, config
_default_loglevel = logging.DEBUG
# Define a TRACE level
LEVEL_TRACE = 5
logging.addLevelName(LEVEL_TRACE, "TRACE")
logging.TRACE = LEVEL_TRACE # type: ignore
logging.Logger.trace = lambda self, message, *args, **kwargs: self._log( # type: ignore
logging.TRACE, # type: ignore
message,
args,
**kwargs
)
class Logger:
"""
@ -66,9 +77,9 @@ class Logger:
"""
self.logger = logging.getLogger(logger_name)
# Configure the logging.Logger
# This needs to always be DEBUG in order to let DEBUG level messages
# This needs to always be TRACE in order to let TRACE level messages
# through to check the *handler* levels.
self.logger.setLevel(logging.DEBUG)
self.logger.setLevel(logging.TRACE) # type: ignore
# Set up filter for adding class name
self.logger_filter = EDMCContextFilter()
@ -102,8 +113,8 @@ class Logger:
encoding='utf-8',
delay=False
)
# Yes, we always want these rotated files to be at DEBUG level
self.logger_channel_rotating.setLevel(logging.DEBUG)
# Yes, we always want these rotated files to be at TRACE level
self.logger_channel_rotating.setLevel(logging.TRACE) # type: ignore
self.logger_channel_rotating.setFormatter(self.logger_formatter)
self.logger.addHandler(self.logger_channel_rotating)
@ -118,10 +129,33 @@ class Logger:
def get_streamhandler(self) -> logging.Handler:
"""
Obtain the self.logger_channel StreamHandler instance.
:return: logging.StreamHandler
"""
return self.logger_channel
def set_channels_loglevel(self, level: int) -> None:
"""
Set the specified log level on the channels.
:param level: A valid `logging` level.
:return: None
"""
self.logger_channel.setLevel(level)
self.logger_channel_rotating.setLevel(level)
def set_console_loglevel(self, level: int) -> None:
"""
Set the specified log level on the console channel.
:param level: A valid `logging` level.
:return: None
"""
if self.logger_channel.level != logging.TRACE: # type: ignore
self.logger_channel.setLevel(level)
else:
logger.trace("Not changing log level because it's TRACE") # type: ignore
def get_plugin_logger(plugin_name: str, loglevel: int = _default_loglevel) -> logging.Logger:
"""
@ -335,7 +369,6 @@ class EDMCContextFilter(logging.Filter):
def get_main_logger() -> logging.Logger:
"""Return the correct logger for how the program is being run."""
if not os.getenv("EDMC_NO_UI"):
# GUI app being run
return logging.getLogger(appname)

View File

@ -1,6 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import argparse
from builtins import str
from builtins import object
import sys
@ -1059,7 +1060,32 @@ Locale LC_TIME: {locale.getlocale(locale.LC_TIME)}'''
if __name__ == "__main__":
enforce_single_instance()
from EDMCLogging import logger
# Command-line arguments
parser = argparse.ArgumentParser(
prog=appname,
description="Utilises Elite Dangerous Journal files and the Frontier "
"Companion API (CAPI) service to gather data about a "
"player's state and actions to upload to third-party sites "
"such as EDSM, Inara.cz and EDDB."
)
parser.add_argument('--trace',
help='Set the Debug logging loglevel to TRACE',
action='store_true',
)
args = parser.parse_args()
from EDMCLogging import edmclogger, logger, logging
# isort: off
from logging import trace, TRACE # type: ignore # noqa: F401
# isort: on
if args.trace:
logger.setLevel(logging.TRACE)
edmclogger.set_channels_loglevel(logging.TRACE)
else:
edmclogger.set_channels_loglevel(logging.DEBUG)
logger.info(f'Startup v{appversion} : Running on Python v{sys.version}')
logger.debug(f'''Platform: {sys.platform}
@ -1114,7 +1140,7 @@ sys.path: {sys.path}'''
ui_scale = 100
config.set('ui_scale', ui_scale)
theme.default_ui_scale = root.tk.call('tk', 'scaling')
logger.debug(f'Default tk scaling = {theme.default_ui_scale}')
logger.trace(f'Default tk scaling = {theme.default_ui_scale}')
theme.startup_ui_scale = ui_scale
root.tk.call('tk', 'scaling', theme.default_ui_scale * float(ui_scale) / 100.0)
app = AppWindow(root)

View File

@ -14,7 +14,7 @@ from typing import TYPE_CHECKING, Any, Callable, Optional, Type, Union
import myNotebook as nb # noqa: N813
import plug
from config import applongname, appname, appversion, config
from config import applongname, appversion, config
from EDMCLogging import edmclogger, get_main_logger
from hotkey import hotkeymgr
from l10n import Translations
@ -1060,7 +1060,7 @@ class PreferencesDialog(tk.Toplevel):
config.set('system_provider', self.system_provider.get())
config.set('station_provider', self.station_provider.get())
config.set('loglevel', self.select_loglevel.get())
edmclogger.get_streamhandler().setLevel(self.select_loglevel.get())
edmclogger.set_console_loglevel(self.select_loglevel.get())
lang_codes = {v: k for k, v in self.languages.items()} # Codes by name
config.set('language', lang_codes.get(self.lang.get()) or '') # or '' used here due to Default being None above