aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Numerlor <[email protected]>2021-04-15 22:10:26 +0200
committerGravatar Numerlor <[email protected]>2021-04-15 22:13:13 +0200
commitf80303718eed9bc676fe2e3e3fc06cffffbf1a92 (patch)
treedef0380450aa4ce10fb5de8aa9a9f2a47ea3477c
parentMerge pull request #1523 from kwzrd/kwzrd/branding-dev (diff)
Make trace logging optional and allow selective enabling
Because coloredlogs' install changes the level of the root handler, the setLevel call had to be moved to after the install.
-rw-r--r--bot/constants.py1
-rw-r--r--bot/log.py20
-rw-r--r--config-default.yml7
3 files changed, 19 insertions, 9 deletions
diff --git a/bot/constants.py b/bot/constants.py
index 6d14bbb3a..14400700f 100644
--- a/bot/constants.py
+++ b/bot/constants.py
@@ -199,6 +199,7 @@ class Bot(metaclass=YAMLGetter):
prefix: str
sentry_dsn: Optional[str]
token: str
+ trace_loggers: Optional[str]
class Redis(metaclass=YAMLGetter):
diff --git a/bot/log.py b/bot/log.py
index e92233a33..339ed63a7 100644
--- a/bot/log.py
+++ b/bot/log.py
@@ -20,7 +20,6 @@ def setup() -> None:
logging.addLevelName(TRACE_LEVEL, "TRACE")
Logger.trace = _monkeypatch_trace
- log_level = TRACE_LEVEL if constants.DEBUG_MODE else logging.INFO
format_string = "%(asctime)s | %(name)s | %(levelname)s | %(message)s"
log_format = logging.Formatter(format_string)
@@ -30,7 +29,6 @@ def setup() -> None:
file_handler.setFormatter(log_format)
root_log = logging.getLogger()
- root_log.setLevel(log_level)
root_log.addHandler(file_handler)
if "COLOREDLOGS_LEVEL_STYLES" not in os.environ:
@@ -44,11 +42,9 @@ def setup() -> None:
if "COLOREDLOGS_LOG_FORMAT" not in os.environ:
coloredlogs.DEFAULT_LOG_FORMAT = format_string
- if "COLOREDLOGS_LOG_LEVEL" not in os.environ:
- coloredlogs.DEFAULT_LOG_LEVEL = log_level
-
- coloredlogs.install(logger=root_log, stream=sys.stdout)
+ coloredlogs.install(level=logging.TRACE, logger=root_log, stream=sys.stdout)
+ root_log.setLevel(logging.DEBUG if constants.DEBUG_MODE else logging.INFO)
logging.getLogger("discord").setLevel(logging.WARNING)
logging.getLogger("websockets").setLevel(logging.WARNING)
logging.getLogger("chardet").setLevel(logging.WARNING)
@@ -57,6 +53,8 @@ def setup() -> None:
# Set back to the default of INFO even if asyncio's debug mode is enabled.
logging.getLogger("asyncio").setLevel(logging.INFO)
+ _set_trace_loggers()
+
def setup_sentry() -> None:
"""Set up the Sentry logging integrations."""
@@ -86,3 +84,13 @@ def _monkeypatch_trace(self: logging.Logger, msg: str, *args, **kwargs) -> None:
"""
if self.isEnabledFor(TRACE_LEVEL):
self._log(TRACE_LEVEL, msg, args, **kwargs)
+
+
+def _set_trace_loggers() -> None:
+ """Set loggers to the trace level according to the value from the BOT_TRACE_LOGGERS env var."""
+ if constants.Bot.trace_loggers:
+ if constants.Bot.trace_loggers in {"*", "ROOT"}:
+ logging.getLogger().setLevel(logging.TRACE)
+ else:
+ for logger_name in constants.Bot.trace_loggers.split(","):
+ logging.getLogger(logger_name).setLevel(logging.TRACE)
diff --git a/config-default.yml b/config-default.yml
index 8c6e18470..b9786925d 100644
--- a/config-default.yml
+++ b/config-default.yml
@@ -1,7 +1,8 @@
bot:
- prefix: "!"
- sentry_dsn: !ENV "BOT_SENTRY_DSN"
- token: !ENV "BOT_TOKEN"
+ prefix: "!"
+ sentry_dsn: !ENV "BOT_SENTRY_DSN"
+ token: !ENV "BOT_TOKEN"
+ trace_loggers: !ENV "BOT_TRACE_LOGGERS"
clean:
# Maximum number of messages to traverse for clean commands