diff --git a/locales/en.json b/locales/en.json index 0a4619ba9..ecfba2947 100644 --- a/locales/en.json +++ b/locales/en.json @@ -252,7 +252,7 @@ "invalid_url_format": "Invalid URL format", "ip6tables_unavailable": "You cannot play with ip6tables here. You are either in a container or your kernel does not support it", "iptables_unavailable": "You cannot play with iptables here. You are either in a container or your kernel does not support it", - "log_corrupted_md_file": "The yaml metadata file associated with logs is corrupted: '{md_file}'", + "log_corrupted_md_file": "The yaml metadata file associated with logs is corrupted: '{md_file}\nError: {error}'", "log_category_404": "The log category '{category}' does not exist", "log_link_to_log": "Full log of this operation: '{desc}'", "log_help_to_get_log": "To view the log of the operation '{desc}', use the command 'yunohost log display {name}'", diff --git a/src/yunohost/log.py b/src/yunohost/log.py index 3a4e447f6..e6d8f7cc4 100644 --- a/src/yunohost/log.py +++ b/src/yunohost/log.py @@ -33,9 +33,10 @@ from datetime import datetime from logging import FileHandler, getLogger, Formatter from moulinette import m18n, msettings +from moulinette.core import MoulinetteError from yunohost.utils.error import YunohostError from moulinette.utils.log import getActionLogger -from moulinette.utils.filesystem import read_file +from moulinette.utils.filesystem import read_file, read_yaml CATEGORIES_PATH = '/var/log/yunohost/categories/' OPERATIONS_PATH = '/var/log/yunohost/categories/operation/' @@ -102,13 +103,8 @@ def log_list(category=[], limit=None, with_details=False): entry["started_at"] = log_datetime if with_details: - with open(md_path, "r") as md_file: - try: - metadata = yaml.safe_load(md_file) - except yaml.YAMLError: - logger.warning(m18n.n('log_corrupted_md_file', file=md_path)) - - entry["success"] = metadata.get("success", "?") if metadata else "?" + metadata = read_yaml(md_path) + entry["success"] = metadata.get("success", "?") if metadata else "?" result[category].append(entry) @@ -186,17 +182,19 @@ def log_display(path, number=None, share=False): if os.path.exists(md_path): with open(md_path, "r") as md_file: try: - metadata = yaml.safe_load(md_file) - infos['metadata_path'] = md_path - infos['metadata'] = metadata - if 'log_path' in metadata: - log_path = metadata['log_path'] - except yaml.YAMLError: - error = m18n.n('log_corrupted_md_file', file=md_path) + metadata = read_yaml(md_file) + except MoulinetteError as e: + error = m18n.n('log_corrupted_md_file', md_file=md_path, error=e) if os.path.exists(log_path): logger.warning(error) else: raise YunohostError(error) + else: + infos['metadata_path'] = md_path + infos['metadata'] = metadata + + if 'log_path' in metadata: + log_path = metadata['log_path'] # Display logs if exist if os.path.exists(log_path):