67 lines
2.5 KiB
GDScript
67 lines
2.5 KiB
GDScript
class_name LoggieConsoleChannel extends LoggieMsgChannel
|
|||
|
|
|
||
|
|
## Custom Loggie channel that feeds messages directly to the LoggieConsole
|
||
|
|
## This channel captures all message metadata (level, type, domain, channels, stack info)
|
||
|
|
## without requiring string parsing
|
||
|
|
|
||
|
|
|
||
|
|
# Reference to the console window that will display messages
|
||
|
|
var _console_window: LoggieConsole
|
||
|
|
|
||
|
|
func _init() -> void:
|
||
|
|
ID = "loggie_console"
|
||
|
|
# Enable all preprocessing steps to get complete information
|
||
|
|
preprocess_flags = (
|
||
|
|
LoggieEnums.PreprocessStep.APPEND_TIMESTAMPS |
|
||
|
|
LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME |
|
||
|
|
LoggieEnums.PreprocessStep.APPEND_CLASS_NAME
|
||
|
|
)
|
||
|
|
|
||
|
|
## Sets the console window that will receive messages from this channel
|
||
|
|
## @param window: The console window instance, must not be null
|
||
|
|
func set_console_window(window: LoggieConsole) -> void:
|
||
|
|
if window == null:
|
||
|
|
Loggie.msg("Cannot set null console window").domain(LoggieConsoleConstants.DOMAIN).error()
|
||
|
|
return
|
||
|
|
_console_window = window
|
||
|
|
|
||
|
|
## Override send method to pass complete message data to console
|
||
|
|
## @param msg: The Loggie message object containing all metadata
|
||
|
|
## @param msg_type: The message type enum from Loggie
|
||
|
|
func send(msg: LoggieMsg, msg_type: LoggieEnums.MsgType) -> void:
|
||
|
|
if _console_window == null:
|
||
|
|
Loggie.msg("No console window set, message dropped").domain(LoggieConsoleConstants.DOMAIN).warn()
|
||
|
|
return
|
||
|
|
|
||
|
|
if msg == null:
|
||
|
|
Loggie.msg("Received null message").domain(LoggieConsoleConstants.DOMAIN).error()
|
||
|
|
return
|
||
|
|
|
||
|
|
# Get the preprocessed text (already formatted by Loggie)
|
||
|
|
var preprocessed_text = msg.last_preprocess_result
|
||
|
|
|
||
|
|
# Determine log level from the message content patterns or message type
|
||
|
|
var log_level = _determine_log_level(msg, msg_type, preprocessed_text)
|
||
|
|
|
||
|
|
# Send complete message data to console
|
||
|
|
_console_window.receive_log_message(msg, preprocessed_text, msg_type, log_level)
|
||
|
|
|
||
|
|
## Determine the log level based on message type and content
|
||
|
|
func _determine_log_level(_msg: LoggieMsg, msg_type: LoggieEnums.MsgType, content: String) -> LoggieEnums.LogLevel:
|
||
|
|
# Use message type to infer log level
|
||
|
|
match msg_type:
|
||
|
|
LoggieEnums.MsgType.ERROR:
|
||
|
|
return LoggieEnums.LogLevel.ERROR
|
||
|
|
LoggieEnums.MsgType.WARN:
|
||
|
|
return LoggieEnums.LogLevel.WARN
|
||
|
|
LoggieEnums.MsgType.DEBUG:
|
||
|
|
return LoggieEnums.LogLevel.DEBUG
|
||
|
|
LoggieEnums.MsgType.INFO:
|
||
|
|
# For standard messages, check content patterns to determine level
|
||
|
|
if content.contains("[NOTICE]"):
|
||
|
|
return LoggieEnums.LogLevel.NOTICE
|
||
|
|
else:
|
||
|
|
return LoggieEnums.LogLevel.INFO
|
||
|
|
_:
|
||
|
|
return LoggieEnums.LogLevel.INFO
|