diff --git a/src/yunohost/__init__.py b/src/yunohost/__init__.py index 2f6d400c8..04b2115b2 100644 --- a/src/yunohost/__init__.py +++ b/src/yunohost/__init__.py @@ -89,116 +89,79 @@ def init_logging(interface="cli", debug=False, quiet=False, logdir="/var/log/yun if not os.path.isdir(logdir): os.makedirs(logdir, 0o750) - # ####################################################################### # + logging_configuration = { + 'version': 1, + 'disable_existing_loggers': True, + 'formatters': { + 'console': { + 'format': '%(relativeCreated)-5d %(levelname)-8s %(name)s %(funcName)s - %(fmessage)s' + }, + 'tty-debug': { + 'format': '%(relativeCreated)-4d %(fmessage)s' + }, + 'precise': { + 'format': '%(asctime)-15s %(levelname)-8s %(name)s %(funcName)s - %(fmessage)s' + }, + }, + 'filters': { + 'action': { + '()': 'moulinette.utils.log.ActionFilter', + }, + }, + 'handlers': { + 'cli': { + 'level': 'DEBUG' if debug else 'INFO', + 'class': 'moulinette.interfaces.cli.TTYHandler', + 'formatter': 'tty-debug' if debug else '', + }, + 'api': { + 'level': 'DEBUG' if debug else 'INFO', + 'class': 'moulinette.interfaces.api.APIQueueHandler', + }, + 'file': { + 'class': 'logging.FileHandler', + 'formatter': 'precise', + 'filename': logfile, + 'filters': ['action'], + }, + }, + 'loggers': { + 'yunohost': { + 'level': 'DEBUG', + 'handlers': ['file', interface] if not quiet else ['file'], + 'propagate': False, + }, + 'moulinette': { + 'level': 'DEBUG', + 'handlers': ['file', interface] if not quiet else ['file'], + 'propagate': False, + }, + }, + 'root': { + 'level': 'DEBUG', + 'handlers': ['file', interface] if debug else ['file'], + }, + } + # Logging configuration for CLI (or any other interface than api...) # - # ####################################################################### # if interface != "api": - configure_logging( - { - "version": 1, - "main_logger": "yunohost", - "disable_existing_loggers": True, - "formatters": { - "tty-debug": {"format": "%(relativeCreated)-4d %(fmessage)s"}, - "precise": { - "format": "%(asctime)-15s %(levelname)-8s %(name)s %(funcName)s - %(fmessage)s" - }, - }, - "filters": { - "action": { - "()": "moulinette.utils.log.ActionFilter", - }, - }, - "handlers": { - "tty": { - "level": "DEBUG" if debug else "INFO", - "class": "moulinette.interfaces.cli.TTYHandler", - "formatter": "tty-debug" if debug else "", - }, - "file": { - "class": "logging.FileHandler", - "formatter": "precise", - "filename": logfile, - "filters": ["action"], - }, - }, - "loggers": { - "yunohost": { - "level": "DEBUG", - "handlers": ["file", "tty"] if not quiet else ["file"], - "propagate": False, - }, - "moulinette": { - "level": "DEBUG", - "handlers": [], - "propagate": True, - }, - "moulinette.interface": { - "level": "DEBUG", - "handlers": ["file", "tty"] if not quiet else ["file"], - "propagate": False, - }, - }, - "root": { - "level": "DEBUG", - "handlers": ["file", "tty"] if debug else ["file"], - }, - } - ) - # ####################################################################### # + configure_logging(logging_configuration) + # Logging configuration for API # - # ####################################################################### # else: - configure_logging( - { - "version": 1, - "disable_existing_loggers": True, - "formatters": { - "console": { - "format": "%(relativeCreated)-5d %(levelname)-8s %(name)s %(funcName)s - %(fmessage)s" - }, - "precise": { - "format": "%(asctime)-15s %(levelname)-8s %(name)s %(funcName)s - %(fmessage)s" - }, - }, - "filters": { - "action": { - "()": "moulinette.utils.log.ActionFilter", - }, - }, - "handlers": { - "api": { - "level": "DEBUG" if debug else "INFO", - "class": "moulinette.interfaces.api.APIQueueHandler", - }, - "file": { - "class": "logging.handlers.WatchedFileHandler", - "formatter": "precise", - "filename": logfile, - "filters": ["action"], - }, - "console": { - "class": "logging.StreamHandler", - "formatter": "console", - "stream": "ext://sys.stdout", - "filters": ["action"], - }, - }, - "loggers": { - "yunohost": { - "level": "DEBUG", - "handlers": ["file", "api"] + (["console"] if debug else []), - "propagate": False, - }, - "moulinette": { - "level": "DEBUG", - "handlers": [], - "propagate": True, - }, - }, - "root": { - "level": "DEBUG", - "handlers": ["file"] + (["console"] if debug else []), - }, - } - ) + # We use a WatchedFileHandler instead of regular FileHandler to possibly support log rotation etc + logging_configuration["handlers"]["file"]["class"] = 'logging.handlers.WatchedFileHandler' + + # This is for when launching yunohost-api in debug mode, we want to display stuff in the console + if debug: + logging_configuration["handlers"]["console"] = { + 'class': 'logging.StreamHandler', + 'formatter': 'console', + 'stream': 'ext://sys.stdout', + 'filters': ['action'], + }, + logging_configuration["loggers"]["yunohost"]["handlers"].append("console") + logging_configuration["loggers"]["moulinette"]["handlers"].append("console") + logging_configuration["root"]["handlers"].append("console") + + configure_logging(logging_configuration) diff --git a/src/yunohost/diagnosis.py b/src/yunohost/diagnosis.py index b3e8b8636..d01d56613 100644 --- a/src/yunohost/diagnosis.py +++ b/src/yunohost/diagnosis.py @@ -551,9 +551,8 @@ class Diagnoser: @staticmethod def get_description(id_): key = "diagnosis_description_" + id_ - descr = m18n.n(key) # If no description available, fallback to id - return descr if descr != key else id_ + return m18n.n(key) if m18n.key_exists(key) else id_ @staticmethod def i18n(report, force_remove_html_tags=False): diff --git a/src/yunohost/service.py b/src/yunohost/service.py index bc72301da..2de395131 100644 --- a/src/yunohost/service.py +++ b/src/yunohost/service.py @@ -397,14 +397,11 @@ def _get_and_format_service_status(service, infos): # If no description was there, try to get it from the .json locales if not description: - translation_key = "service_description_%s" % service - description = m18n.n(translation_key) - # If descrption is still equal to the translation key, - # that mean that we don't have a translation for this string - # that's the only way to test for that for now - # if we don't have it, uses the one provided by systemd - if description == translation_key: + translation_key = "service_description_%s" % service + if m18n.key_exists(translation_key): + description = m18n.key_exists(translation_key) + else: description = str(raw_status.get("Description", "")) output = {