From c041425bca81b042b51eee125ddce1ef46ec5348 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 2 Oct 2021 18:44:33 +0200 Subject: [PATCH 1/5] Catch unicode-decode error in logger display --- evennia/utils/logger.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/evennia/utils/logger.py b/evennia/utils/logger.py index 7997327ab0..28b19aa05a 100644 --- a/evennia/utils/logger.py +++ b/evennia/utils/logger.py @@ -392,7 +392,15 @@ class EvenniaLogFile(logfile.LogFile): Returns: lines (list): lines from our _file attribute. """ - return [line.decode("utf-8") for line in self._file.readlines(*args, **kwargs)] + lines = [] + for line in self._file.readlines(*args, **kwargs): + try: + lines.append(line.decode("utf-8")) + except UnicodeDecodeError: + try: + lines.append(str(line)) + except Exception: + lines.append("") _LOG_FILE_HANDLES = {} # holds open log handles From 5d1ff40d7522778be48a8a2e1bcc2f2bc4a78eb3 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 2 Oct 2021 18:47:12 +0200 Subject: [PATCH 2/5] Further fix of logger --- evennia/utils/logger.py | 1 + 1 file changed, 1 insertion(+) diff --git a/evennia/utils/logger.py b/evennia/utils/logger.py index 28b19aa05a..6122eb30b5 100644 --- a/evennia/utils/logger.py +++ b/evennia/utils/logger.py @@ -401,6 +401,7 @@ class EvenniaLogFile(logfile.LogFile): lines.append(str(line)) except Exception: lines.append("") + return lines _LOG_FILE_HANDLES = {} # holds open log handles From e4bad8007faceea9a743f07d0bcc4e7a76e7b2d6 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 2 Oct 2021 18:57:51 +0200 Subject: [PATCH 3/5] Test generator for log file return --- evennia/utils/logger.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/evennia/utils/logger.py b/evennia/utils/logger.py index 6122eb30b5..c38e1e8260 100644 --- a/evennia/utils/logger.py +++ b/evennia/utils/logger.py @@ -390,18 +390,17 @@ class EvenniaLogFile(logfile.LogFile): **kwargs: same kwargs as file.readlines Returns: - lines (list): lines from our _file attribute. + Generator: lines from our _file attribute. """ - lines = [] for line in self._file.readlines(*args, **kwargs): try: - lines.append(line.decode("utf-8")) + lin = line.decode("utf-8") except UnicodeDecodeError: try: - lines.append(str(line)) + lin = str(lin) except Exception: - lines.append("") - return lines + lin = "" + yield lin _LOG_FILE_HANDLES = {} # holds open log handles From a4d34358fe10194b771fd2c2004732c5a8e11a76 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 2 Oct 2021 19:05:26 +0200 Subject: [PATCH 4/5] More log tweaks --- evennia/utils/logger.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/evennia/utils/logger.py b/evennia/utils/logger.py index c38e1e8260..e7b0811740 100644 --- a/evennia/utils/logger.py +++ b/evennia/utils/logger.py @@ -390,17 +390,18 @@ class EvenniaLogFile(logfile.LogFile): **kwargs: same kwargs as file.readlines Returns: - Generator: lines from our _file attribute. + lines (list): lines from our _file attribute. """ + lines = [] for line in self._file.readlines(*args, **kwargs): try: - lin = line.decode("utf-8") + lines.append(line.decode("utf-8")) except UnicodeDecodeError: try: - lin = str(lin) + lines.append(str(line)) except Exception: - lin = "" - yield lin + lines.append("") + return lines _LOG_FILE_HANDLES = {} # holds open log handles @@ -519,7 +520,7 @@ def tail_log_file(filename, offset, nlines, callback=None): lines_found = filehandle.readlines() block_count -= 1 # return the right number of lines - lines_found = lines_found[-nlines - offset : -offset if offset else None] + lines_found = lines_found[-nlines - offset: -offset if offset else None] if callback: callback(lines_found) return None From d6ddbd5704c700af37be1f71ef1553938caa8b56 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 2 Oct 2021 19:16:47 +0200 Subject: [PATCH 5/5] Lower maxnum of channel lines for web display --- evennia/web/website/views.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/evennia/web/website/views.py b/evennia/web/website/views.py index fe65bc5c8b..3840262bdb 100644 --- a/evennia/web/website/views.py +++ b/evennia/web/website/views.py @@ -912,7 +912,7 @@ class ChannelDetailView(ChannelMixin, ObjectDetailView): attributes = ["name"] # How many log entries to read and display. - max_num_lines = 10000 + max_num_lines = 1000 def get_context_data(self, **kwargs): """ @@ -936,9 +936,12 @@ class ChannelDetailView(ChannelMixin, ObjectDetailView): for log in (x.strip() for x in tail_log_file(filename, 0, self.max_num_lines)): if not log: continue - time, msg = log.split(" [-] ") - time_key = time.split(":")[0] - + try: + time, msg = log.split(" [-] ") + time_key = time.split(":")[0] + except ValueError: + # malformed log line - skip line + continue bucket.append({"key": time_key, "timestamp": time, "message": msg}) # Add the processed entries to the context