Class PlacementLogger
- Namespace
- GridPlacement.GDScript
- Assembly
- MoonBark.GridPlacement.GDScript.dll
Centralized logging facility for the Grid Building plugin.\n\n[b]Static singleton API (preferred):[/b] [codeblock] # Once, during plugin initialization: PlacementLogger.set_instance(logger)\n\n# Anywhere in the plugin — zero boilerplate, zero null checks: PlacementLogger.debug("msg") PlacementLogger.trace("msg") PlacementLogger.warn("msg") PlacementLogger.error("msg") [/codeblock]\n\n[b]Overriding the logger at game time:[/b] Game developers can replace the logger at any point by calling [method set_instance] with their own [PlacementLogger] instance. The static helpers automatically route through the current instance. [codeblock] # Replace with your own logger (e.g. with custom log_sink, different level): var my_logger := PlacementLogger.new(my_debug_settings) PlacementLogger.set_instance(my_logger)\n\n# Or disable all plugin logging: PlacementLogger.clear_instance() [/codeblock]\n\n[b]Test isolation:[/b] [codeblock] func before_test() -> void: PlacementLogger.set_instance(mock_logger)\n\nfunc after_test() -> void: PlacementLogger.clear_instance() [/codeblock]\n\n[b]Instance API (still available for backward compat):[/b] [code]logger.log_debug("msg")[/code]\n\nUSAGE: Consider dropping log level on the PlacementDebugSettings if you are getting too many messages\n\nResponsibilities: - Provide contextual logging (verbose, error, warning) integrated with plugin debug settings. - Support dependency-injected configuration and throttled verbose output.
class PlacementLogger extends PlacementInjectable
Fields
VERBOSE_MIN_INTERVAL_MS
const VERBOSE_MIN_INTERVAL_MS = 250
LogLevel
Shorthand alias for levels to reduce verbosity at callsites
const LogLevel = PlacementDebugSettings.LogLevel
Properties
debug_settings
var debug_settings = container.get_debug_settings()
logger
var logger = PlacementLogger.new(debug_settings)
issues
var issues: Array[String] = []
stack
var stack = get_stack()
caller
var caller = stack[stack.size() - 1]
source
var source: String = caller.get("source", "")
function
var function: String = caller.get("function", "")
composite
var composite: String = "%s::%s" % [caller_id, key]
now_ms
var now_ms: int = Time.get_ticks_msec()
last_ms
var last_ms: int = _verbose_last_ts.get(composite, -1)
composite
var composite: String = "%s::%s" % [caller_id, key]
stack
var stack = get_stack()
caller
var caller = stack[stack.size() - 1]
source
var source: String = caller.get("source", "")
function
var function: String = caller.get("function", "")
line
var line: int = caller.get("line", 0)
file_name
var file_name: String = source.get_file()
caller
var caller = stack[stack.size() - 1]
source
var source: String = caller.get("source", "")
function
var function: String = caller.get("function", "")
line
var line: int = caller.get("line", 0)
file_name
var file_name: String = source.get_file()
context
var context: String = _get_context_from_stack()
msg
var msg: String = _materialize_message(p_message)
issues
var issues: Array[String] = []
c
var c: Callable = p_provider
result
var result = c.call()
msg_formatted
var msg_formatted: String = "[%s] %s" % [context, message]
caller_id
var caller_id = _get_caller_id()
key
var key = str(p_object.get_instance_id()) if p_object else "null_object"
caller_id
var caller_id = _get_caller_id()
key
var key = str(p_object.get_instance_id()) if p_object else "null_object"
caller_id
var caller_id = _get_caller_id()
key
var key = str(p_object.get_instance_id()) if p_object else "null_object"
caller_id
var caller_id = _get_caller_id()
key
var key = str(p_object.get_instance_id()) if p_object else "null_object"
caller_id
var caller_id = _get_caller_id()
key
var key = str(p_object.get_instance_id()) if p_object else "null_object"
caller_id
var caller_id = _get_caller_id()
key
var key = str(p_object.get_instance_id()) if p_object else "null_object"
caller_id
var caller_id = _get_caller_id()
key
var key = str(p_object.get_instance_id()) if p_object else "null_object"
caller_id
var caller_id = _get_caller_id()
key
var key = str(p_object.get_instance_id()) if p_object else "null_object"
caller_id
var caller_id = _get_caller_id()
key
var key = str(p_object.get_instance_id()) if p_object else "null_object"
Methods
set_instance
static func set_instance(p_logger: PlacementLogger) -> void:
Parameters
p_logger
Returns
clear_instance
static func clear_instance() -> void:
Returns
debug
static func debug(p_message: String) -> void:
Parameters
p_message
Returns
trace
static func trace(p_message: String) -> void:
Parameters
p_message
Returns
info
static func info(p_message: String) -> void:
Parameters
p_message
Returns
warn
static func warn(p_message: String) -> void:
Parameters
p_message
Returns
error
static func error(p_message: String) -> void:
Parameters
p_message
Returns
verbose
static func verbose(p_message: String) -> void:
Parameters
p_message
Returns
create_with_injection
static func create_with_injection(container: PlacementContainer) -> PlacementLogger:
Parameters
container
Returns
set_log_sink
func set_log_sink(p_sink: Callable) -> void:
Parameters
p_sink
Returns
log_at
func log_at(level: LogLevel, p_message) -> void:
Parameters
levelp_message
Returns
get_runtime_issues
func get_runtime_issues() -> Array[String]:
Returns
resolve_placement_dependencies
func resolve_placement_dependencies(p_config: PlacementContainer) -> bool:
Parameters
p_config
Returns
is_level_enabled
func is_level_enabled(level: LogLevel) -> bool:
Parameters
level
Returns
is_debug_enabled
func is_debug_enabled() -> bool:
Returns
is_verbose_enabled
func is_verbose_enabled() -> bool:
Returns
is_trace_enabled
func is_trace_enabled() -> bool:
Returns
log
func log(level: LogLevel, p_message) -> void:
Parameters
levelp_message
Returns
log_debug_lazy
func log_debug_lazy(p_provider: Callable) -> void:
Parameters
p_provider
Returns
log_warning
func log_warning(p_issue: String) -> void:
Parameters
p_issue
Returns
log_info
func log_info(p_message: String) -> void:
Parameters
p_message
Returns
log_error
func log_error(p_issue: String) -> void:
Parameters
p_issue
Returns
log_warnings
func log_warnings(p_issues: Array[String]) -> void:
Parameters
p_issues
Returns
log_issues
func log_issues(p_issues: Array[String]) -> void:
Parameters
p_issues
Returns
log_verbose
func log_verbose(p_message: String) -> void:
Parameters
p_message
Returns
log_trace
func log_trace(p_message: String) -> void:
Parameters
p_message
Returns
log_debug
func log_debug(p_message: String) -> void:
Parameters
p_message
Returns
log_verbose_throttled
func log_verbose_throttled(p_object: Object, p_message: String) -> void:
Parameters
p_objectp_message
Returns
log_debug_throttled
func log_debug_throttled(p_object: Object, p_message: String) -> void:
Parameters
p_objectp_message
Returns
log_trace_throttled
func log_trace_throttled(p_object: Object, p_message: String) -> void:
Parameters
p_objectp_message
Returns
log_verbose_once
func log_verbose_once(p_object: Object, p_message: String) -> void:
Parameters
p_objectp_message
Returns
log_debug_once
func log_debug_once(p_object: Object, p_message: String) -> void:
Parameters
p_objectp_message
Returns
log_trace_once
func log_trace_once(p_object: Object, p_message: String) -> void:
Parameters
p_objectp_message
Returns
log_warning_once
func log_warning_once(p_object: Object, p_message: String) -> void:
Parameters
p_objectp_message
Returns
log_error_once
func log_error_once(p_object: Object, p_message: String) -> void:
Parameters
p_objectp_message
Returns
log_info_once
func log_info_once(p_object: Object, p_message: String) -> void:
Parameters
p_objectp_message
Returns
get_debug_settings
func get_debug_settings() -> PlacementDebugSettings:
Returns
set_log_level
func set_log_level(p_level: LogLevel) -> void:
Parameters
p_level