diff --git a/searx/__init__.py b/searx/__init__.py index 7bda2d7f8..c26b2a00c 100644 --- a/searx/__init__.py +++ b/searx/__init__.py @@ -4,6 +4,7 @@ import sys import os from os.path import dirname, abspath +from enum import Enum import logging @@ -11,14 +12,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() @@ -26,6 +19,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 list(ValidLogLevels.__members__): + LOG_LEVEL_PROD = ValidLogLevels[searx_loglevel.upper()].name +else: + LOG_LEVEL_PROD = logging.WARNING + _unset = object() @@ -95,6 +113,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 5d16f6377..2f0f1d034 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 06cae34bc..e523102e5 100644 --- a/searx/settings_defaults.py +++ b/searx/settings_defaults.py @@ -138,6 +138,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),