Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 39 additions & 10 deletions addons/mod_loader/api/log.gd
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,13 @@ static var verbosity: VERBOSITY_LEVEL = VERBOSITY_LEVEL.DEBUG
## Array of mods that should be ignored when logging messages (contains mod IDs as strings)
static var ignored_mods: Array[String] = []

## Highlighting color for hint type log messages
static var hint_color := Color("#70bafa")
# NOTE: default values which get replaced later by `_configure_logger`
static var warning_color := Color("#ffde66")
static var success_color := Color("#5d8c3f")
static var info_color := Color("#70bafa")
static var hint_color := Color("#b293fa")
static var debug_color := Color("#d4d4d4")
static var debug_bold := true

## This Sub-Class represents a log entry in ModLoader.
class ModLoaderLogEntry:
Expand Down Expand Up @@ -99,9 +104,15 @@ class ModLoaderLogEntry:

## Get the prefix string for the log entry, including the log type and mod name.[br]
## [br]
## [b]Parameters:[/b][br]
## [param exclude_type] ([bool]): (Optional) If true, the log type (e.g., DEBUG, WARN) will be excluded from the prefix. Default is false.[br]
## [br]
## [b]Returns:[/b] [String]
func get_prefix() -> String:
return "%s %s: " % [type.to_upper(), mod_name]
func get_prefix(exclude_type: bool = false) -> String:
return "%s%s: " % [
"" if exclude_type else type.to_upper() + " ",
mod_name
]


## Generate an MD5 hash of the log entry (prefix + message).[br]
Expand Down Expand Up @@ -391,6 +402,17 @@ static func get_all_entries_as_string(log_entries: Array) -> Array:
# Internal log functions
# =============================================================================

static func _print_rich(prefix: String, message: String, color: Color, bold := true):
if OS.has_feature("editor"):
var prefix_text := "[b]%s[/b]" % prefix if bold else prefix
print_rich("[color=%s]%s[/color]%s" % [
color.to_html(false),
prefix_text,
message
])
else:
print(prefix + message)

static func _log(message: String, mod_name: String, log_type: String = "info", only_once := false) -> void:
if _is_mod_name_ignored(mod_name):
return
Expand Down Expand Up @@ -422,25 +444,32 @@ static func _log(message: String, mod_name: String, log_type: String = "info", o
_write_to_log_file(JSON.stringify(get_stack(), " "))
assert(false, message)
"error":
printerr(log_entry.get_prefix() + message)
if OS.has_feature("editor"):
printerr(log_entry.get_prefix(true) + message)
else:
printerr(log_entry.get_prefix() + message)
push_error(message)
_write_to_log_file(log_entry.get_entry())
"warning":
if verbosity >= VERBOSITY_LEVEL.WARNING:
print(log_entry.get_prefix() + message)
_print_rich(log_entry.get_prefix(), message, warning_color)
push_warning(message)
_write_to_log_file(log_entry.get_entry())
"info", "success":
"success":
if verbosity >= VERBOSITY_LEVEL.INFO:
_print_rich(log_entry.get_prefix(), message, success_color)
_write_to_log_file(log_entry.get_entry())
"info":
if verbosity >= VERBOSITY_LEVEL.INFO:
print(log_entry.get_prefix() + message)
_print_rich(log_entry.get_prefix(), message, info_color)
_write_to_log_file(log_entry.get_entry())
"debug":
if verbosity >= VERBOSITY_LEVEL.DEBUG:
print(log_entry.get_prefix() + message)
_print_rich(log_entry.get_prefix(), message, debug_color, debug_bold)
_write_to_log_file(log_entry.get_entry())
"hint":
if OS.has_feature("editor") and verbosity >= VERBOSITY_LEVEL.DEBUG:
print_rich("[color=%s]%s[/color]" % [hint_color.to_html(false), log_entry.get_prefix() + message])
_print_rich(log_entry.get_prefix(), message, hint_color)


static func _is_mod_name_ignored(mod_name: String) -> bool:
Expand Down
5 changes: 5 additions & 0 deletions addons/mod_loader/mod_loader_store.gd
Original file line number Diff line number Diff line change
Expand Up @@ -227,4 +227,9 @@ func _update_ml_options_from_cli_args() -> void:
func _configure_logger() -> void:
ModLoaderLog.verbosity = ml_options.log_level
ModLoaderLog.ignored_mods = ml_options.ignored_mod_names_in_log
ModLoaderLog.warning_color = ml_options.warning_color
ModLoaderLog.success_color = ml_options.success_color
ModLoaderLog.info_color = ml_options.info_color
ModLoaderLog.hint_color = ml_options.hint_color
ModLoaderLog.debug_color = ml_options.debug_color
ModLoaderLog.debug_bold = ml_options.debug_bold
13 changes: 12 additions & 1 deletion addons/mod_loader/resources/options_profile.gd
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,18 @@ enum VERSION_VALIDATION {
## [code]ModLoader:Dependency[/code] - ignore the exact name [br]
## [code]ModLoader:*[/code] - ignore all beginning with this name [br]
@export var ignored_mod_names_in_log: Array[String] = []
@export var hint_color := Color("#70bafa")
## Highlighting color for warning type log messages
@export var warning_color := Color("#ffde66")
## Highlighting color for success type log messages
@export var success_color := Color("#5d8c3f")
## Highlighting color for info type log messages
@export var info_color := Color("#70bafa")
## Highlighting color for hint type log messages
@export var hint_color := Color("#b293fa")
## Highlighting color for debug type log messages
@export var debug_color := Color("#d4d4d4")
## Highlight debug log prefixes with bold formatting
@export var debug_bold := true

@export_group("Game Data")
## Steam app id, can be found in the steam page url
Expand Down