Skip to content

Commit

Permalink
Merge pull request #90900 from Calinou/file-logging-strip-ansi-escape…
Browse files Browse the repository at this point in the history
…-codes

Strip ANSI escape codes from file logging
  • Loading branch information
akien-mga committed Apr 24, 2024
2 parents 2e92fb0 + 459f14c commit dcdaa7d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
16 changes: 16 additions & 0 deletions core/io/logger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
#include "core/os/time.h"
#include "core/string/print_string.h"

#include "modules/modules_enabled.gen.h" // For regex.

#if defined(MINGW_ENABLED) || defined(_MSC_VER)
#define sprintf sprintf_s
#endif
Expand Down Expand Up @@ -180,6 +182,12 @@ RotatedFileLogger::RotatedFileLogger(const String &p_base_path, int p_max_files)
base_path(p_base_path.simplify_path()),
max_files(p_max_files > 0 ? p_max_files : 1) {
rotate_file();

#ifdef MODULE_REGEX_ENABLED
strip_ansi_regex.instantiate();
strip_ansi_regex->detach_from_objectdb(); // Note: This RegEx instance will exist longer than ObjectDB, therefore can't be registered in ObjectDB.
strip_ansi_regex->compile("\u001b\\[((?:\\d|;)*)([a-zA-Z])");
#endif // MODULE_REGEX_ENABLED
}

void RotatedFileLogger::logv(const char *p_format, va_list p_list, bool p_err) {
Expand All @@ -199,7 +207,15 @@ void RotatedFileLogger::logv(const char *p_format, va_list p_list, bool p_err) {
vsnprintf(buf, len + 1, p_format, list_copy);
}
va_end(list_copy);

#ifdef MODULE_REGEX_ENABLED
// Strip ANSI escape codes (such as those inserted by `print_rich()`)
// before writing to file, as text editors cannot display those
// correctly.
file->store_string(strip_ansi_regex->sub(String(buf), "", true));
#else
file->store_buffer((uint8_t *)buf, len);
#endif // MODULE_REGEX_ENABLED

if (len >= static_buf_size) {
Memory::free_static(buf);
Expand Down
8 changes: 8 additions & 0 deletions core/io/logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@
#include "core/io/file_access.h"
#include "core/string/ustring.h"
#include "core/templates/vector.h"
#include "modules/modules_enabled.gen.h" // For regex.
#ifdef MODULE_REGEX_ENABLED
#include "modules/regex/regex.h"
#endif // MODULE_REGEX_ENABLED

#include <stdarg.h>

Expand Down Expand Up @@ -86,6 +90,10 @@ class RotatedFileLogger : public Logger {
void clear_old_backups();
void rotate_file();

#ifdef MODULE_REGEX_ENABLED
Ref<RegEx> strip_ansi_regex;
#endif // MODULE_REGEX_ENABLED

public:
explicit RotatedFileLogger(const String &p_base_path, int p_max_files = 10);

Expand Down

0 comments on commit dcdaa7d

Please sign in to comment.