extends Node class_name Logger var thread: Thread = Thread.new() var mutex: Mutex = Mutex.new() var log_queue: Array[String] = [] var running: bool = true func _ready(): thread.start(log_writer) func info(msg: Variant): mutex.lock() log_queue.append("[color=white][b]INFO:[/b] [/color]" + msg) mutex.unlock() func debug(msg: Variant): mutex.lock() log_queue.append("[color=cyan][b]DEBUG:[/b] [/color]" + msg) mutex.unlock() func warning(msg: Variant): mutex.lock() log_queue.append("[color=yellow][b]WARN:[/b] [/color]" + msg) push_warning(msg) mutex.unlock() func error(msg: Variant): mutex.lock() log_queue.append("[color=red][b]ERROR:[/b] [/color]" + msg) push_error(msg) mutex.unlock() func log_writer(): while running: mutex.lock() while log_queue.size() > 0: var log_message = log_queue.pop_front() print_rich(log_message) mutex.unlock() # Prevent high CPU usage await get_tree().create_timer(0.1).timeout func _exit_tree(): running = false thread.wait_to_finish()