From 3c91f44cc6c15ef25831d723d3bf130dada40083 Mon Sep 17 00:00:00 2001 From: y0nei Date: Mon, 2 Oct 2023 23:39:54 +0200 Subject: [PATCH 1/2] [feat] logs: Settings option to set custom level --- searx/__init__.py | 35 +++++++++++++++++++++++++++-------- searx/settings.yml | 2 ++ searx/settings_defaults.py | 1 + 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/searx/__init__.py b/searx/__init__.py index f86052660..62df1adc5 100644 --- a/searx/__init__.py +++ b/searx/__init__.py @@ -5,6 +5,7 @@ import sys import os from os.path import dirname, abspath +from enum import Enum import logging @@ -12,14 +13,6 @@ import searx.unixthreadname import searx.settings_loader from searx.settings_defaults import settings_set_defaults - -# Debug -LOG_FORMAT_DEBUG = '%(levelname)-7s %(name)-30.30s: %(message)s' - -# Production -LOG_FORMAT_PROD = '%(asctime)-15s %(levelname)s:%(name)s: %(message)s' -LOG_LEVEL_PROD = logging.WARNING - searx_dir = abspath(dirname(__file__)) searx_parent_dir = abspath(dirname(dirname(__file__))) settings, settings_load_message = searx.settings_loader.load_settings() @@ -27,6 +20,31 @@ settings, settings_load_message = searx.settings_loader.load_settings() if settings is not None: settings = settings_set_defaults(settings) + +class ValidLogLevels(str, Enum): + """Log levels for the application, levels should match ones from the logging + module. + + """ + + INFO = logging.INFO + WARN = logging.WARN + WARNING = logging.WARNING + ERROR = logging.ERROR + + +# Debug +LOG_FORMAT_DEBUG = '%(levelname)-7s %(name)-30.30s: %(message)s' + +# Production +LOG_FORMAT_PROD = '%(asctime)-15s %(levelname)s:%(name)s: %(message)s' + +searx_loglevel = settings['general']['log_level'] +if searx_loglevel.upper() in ValidLogLevels._member_names_: + LOG_LEVEL_PROD = ValidLogLevels[searx_loglevel.upper()].name +else: + LOG_LEVEL_PROD = logging.WARNING + _unset = object() @@ -96,6 +114,7 @@ else: logging.root.setLevel(level=LOG_LEVEL_PROD) logging.getLogger('werkzeug').setLevel(level=LOG_LEVEL_PROD) logger = logging.getLogger('searx') +logger.setLevel(level=LOG_LEVEL_PROD) logger.info(settings_load_message) # log max_request_timeout diff --git a/searx/settings.yml b/searx/settings.yml index 551e6b96e..404145f89 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -1,6 +1,8 @@ general: # Debug mode, only for development. Is overwritten by ${SEARXNG_DEBUG} debug: false + # Application log level - leave blank to use the default 'WARNING' level + log_level: "warning" # displayed name instance_name: "SearXNG" # For example: https://example.com/privacy diff --git a/searx/settings_defaults.py b/searx/settings_defaults.py index ad45f8617..6d7d32d3d 100644 --- a/searx/settings_defaults.py +++ b/searx/settings_defaults.py @@ -139,6 +139,7 @@ def apply_schema(settings, schema, path_list): SCHEMA = { 'general': { 'debug': SettingsValue(bool, False, 'SEARXNG_DEBUG'), + 'log_level': SettingsValue(str, 'warning'), 'instance_name': SettingsValue(str, 'SearXNG'), 'privacypolicy_url': SettingsValue((None, False, str), None), 'contact_url': SettingsValue((None, False, str), None), From bf7d5cd4321f3425fb18c3a2ed4854a745ee1b33 Mon Sep 17 00:00:00 2001 From: y0nei Date: Tue, 3 Oct 2023 10:32:34 +0200 Subject: [PATCH 2/2] [fix] logs: Proper member name mapping for ValidLogLevels `_member_names_` is not part of the Enum documented public API, instead use `__members__`. --- searx/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/searx/__init__.py b/searx/__init__.py index 62df1adc5..94eb7998b 100644 --- a/searx/__init__.py +++ b/searx/__init__.py @@ -40,7 +40,7 @@ LOG_FORMAT_DEBUG = '%(levelname)-7s %(name)-30.30s: %(message)s' LOG_FORMAT_PROD = '%(asctime)-15s %(levelname)s:%(name)s: %(message)s' searx_loglevel = settings['general']['log_level'] -if searx_loglevel.upper() in ValidLogLevels._member_names_: +if searx_loglevel.upper() in list(ValidLogLevels.__members__): LOG_LEVEL_PROD = ValidLogLevels[searx_loglevel.upper()].name else: LOG_LEVEL_PROD = logging.WARNING