diff --git a/Characters/Meldewesen/Meldewesen.gd b/Characters/Meldewesen/Meldewesen.gd index af6cbdc..5e4adde 100644 --- a/Characters/Meldewesen/Meldewesen.gd +++ b/Characters/Meldewesen/Meldewesen.gd @@ -7,6 +7,7 @@ var _visibility: Area func _ready(): + Logger.set_logger_level(Logger.LOG_LEVEL_DEBUG) _visibility = get_node(_visibility_path) as Area if _visibility: @@ -17,6 +18,7 @@ func _ready(): func _on_body_entered_visibility(body: Node): if body.is_in_group("Player"): print("Seeing player!") + Logger.info("Seeing player!") # TODO: Check if the Player is in an area where they shouldn't be # TODO: Follow the Player @@ -25,4 +27,5 @@ func _on_body_entered_visibility(body: Node): func _on_body_exited_visibility(body: Node): if body.is_in_group("Player"): print("Stopped seeing player!") + Logger.info("Stopped seeing player!") # TODO: Stop following the Player diff --git a/Util/gs-logger-3.1-R3/gs_logger/appender.gd b/Util/gs-logger-3.1-R3/gs_logger/appender.gd new file mode 100644 index 0000000..33fd013 --- /dev/null +++ b/Util/gs-logger-3.1-R3/gs_logger/appender.gd @@ -0,0 +1,52 @@ +""" +Class: Appender + Responsible for Delivering a Log Event to its Destination. +""" + +extends Reference +class_name Appender + +var layout: Layout = PatternLayout.new() +var logger_level: int = 999 setget _set_logger_level +var logger_format: int = 030 + +var name = "appender" +var is_open = false + + +func _set_logger_level(level: int): + logger_level = level + + +""" +Function: start + Start this Appender +""" +func start(): + pass + +""" +Function: stop + Stop this Appender +""" +func stop(): + pass + +""" +Function: append + Logs an Event in whatever logic this Appender has +""" +func append(message: Message): + pass + + +""" +Function: append_raw + Send Raw Text to the Appender +""" +func append_raw(text: String): + pass + + +func _init(): + pass diff --git a/Util/gs-logger-3.1-R3/gs_logger/appenders/console_appender.gd b/Util/gs-logger-3.1-R3/gs_logger/appenders/console_appender.gd new file mode 100644 index 0000000..f1be8cc --- /dev/null +++ b/Util/gs-logger-3.1-R3/gs_logger/appenders/console_appender.gd @@ -0,0 +1,21 @@ + +""" +Class: ConsoleAppender + Logs an Event to the Console Window. +""" + +extends Appender +class_name ConsoleAppender + +func append(message: Message): + print(layout.build(message, logger_format)) + + +func append_raw(text: String): + print(text) + + +func _init(): + name = "console appender" + print("** Console Appender Initialized **") + print(" ") diff --git a/Util/gs-logger-3.1-R3/gs_logger/appenders/file_appender.gd b/Util/gs-logger-3.1-R3/gs_logger/appenders/file_appender.gd new file mode 100644 index 0000000..6596961 --- /dev/null +++ b/Util/gs-logger-3.1-R3/gs_logger/appenders/file_appender.gd @@ -0,0 +1,32 @@ + +""" +Class: FileAppender + Logs an Event to a File. +""" + +extends Appender +class_name FileAppender + +var savefile + + +func append(message): + savefile.store_string(layout.build(message, logger_format)) + savefile.store_string("\n") + + +func append_raw(text): + savefile.store_string(text) + savefile.store_string("\n") + + +func stop(): + savefile.close() + + +func _init(filename="%s.log" % ProjectSettings.get("application/config/name")): + savefile = File.new() + savefile.open("%s" % [filename], File.WRITE) + name = "file appender" + print("** File Appender Initialized **") + print(" ") diff --git a/Util/gs-logger-3.1-R3/gs_logger/layout.gd b/Util/gs-logger-3.1-R3/gs_logger/layout.gd new file mode 100644 index 0000000..ad041f7 --- /dev/null +++ b/Util/gs-logger-3.1-R3/gs_logger/layout.gd @@ -0,0 +1,21 @@ +""" +Class: Layout + Formats a Log Event for an Appender. +""" +extends Reference +class_name Layout + +func getHeader(): + return "" + + +func getFooter(): + return "" + + +func build(message: Message, format: int): + return message + + +func _init(): + pass diff --git a/Util/gs-logger-3.1-R3/gs_logger/layouts/html_layout.gd b/Util/gs-logger-3.1-R3/gs_logger/layouts/html_layout.gd new file mode 100644 index 0000000..e14f1c3 --- /dev/null +++ b/Util/gs-logger-3.1-R3/gs_logger/layouts/html_layout.gd @@ -0,0 +1,61 @@ +""" +Class: HtmlLayout + Generates an HTML Page and adds each Log Event + to a Row in a Table. +""" + +extends Layout +class_name HtmlLayout + +var contextual_classes = \ + { + Logger.LOG_LEVEL_ALL: "", + Logger.LOG_LEVEL_FINE: "", + Logger.LOG_LEVEL_TRACE: "", + Logger.LOG_LEVEL_INFO: "info", + Logger.LOG_LEVEL_FATAL: "danger", + Logger.LOG_LEVEL_WARN: "warning", + Logger.LOG_LEVEL_ERROR: "danger", + Logger.LOG_LEVEL_DEBUG: "", + Logger.LOG_LEVEL_NONE: "", + } + +var header = \ +""" + + +Message Log + + + + + +
+

Godot Logger

+ + + + + +""" + + +var footer = \ +""" +
NumberMessage
+ + +""" + +func getHeader(): + return header + + +func getFooter(): + return "" + + +func build(message: Message, format: int): + return '%d%s' % [contextual_classes[message.level], message.line, message.text] + + diff --git a/Util/gs-logger-3.1-R3/gs_logger/layouts/pattern_layout.gd b/Util/gs-logger-3.1-R3/gs_logger/layouts/pattern_layout.gd new file mode 100644 index 0000000..f2790f4 --- /dev/null +++ b/Util/gs-logger-3.1-R3/gs_logger/layouts/pattern_layout.gd @@ -0,0 +1,44 @@ + +""" +Class: PatternLayout + A Flexible Layout with a Pattern String. +""" +extends Layout +class_name PatternLayout + +func build(message: Message, format: int): + + match format: + + Logger.LOG_FORMAT_DEFAULT: + return "%-10s %-8d %s" % [Logger.get_level_name(message.level), message.line, message.text] + Logger.LOG_FORMAT_FULL: + return "%s %-8s %-8s %-8d %s" % [Logger.get_formatted_date(OS.get_datetime()), message.category.to_upper(), Logger.get_level_name(message.level), message.line, message.text] + Logger.LOG_FORMAT_MORE: + return "%s %-8s %-8d %s" % [Logger.get_formatted_date(OS.get_datetime()), Logger.get_level_name(message.level), message.line, message.text] + Logger.LOG_FORMAT_NONE: + return message.text + Logger.LOG_FORMAT_SIMPLE: + return "%-8d %s" % [message.line, message.text] + _: + return "%-8s %s" % [Logger.get_formatted_date(OS.get_datetime()), message.text] + + + """ + var msg = "" + + match format: + LogFormats.FULL: + msg = "%s %-8s %-8s %-8d %s" % [_get_formatted_date(OS.get_datetime()), category.to_upper(), _get_level_name(level), logger_line, message] + LogFormats.MORE: + msg = "%-8s %-8s %-8d %s" % [_get_formatted_date(OS.get_datetime()), category.to_upper(), _get_level_name(level), logger_line, message] + LogFormats.DEFAULT: + msg = "%-10s %-8d %s" % [_get_level_name(level), logger_line, message] + LogFormats.SIMPLE: + msg = "%-8d %s" % [logger_line, message] + _: + msg = "%s" % [message] + """ + + + diff --git a/Util/gs-logger-3.1-R3/gs_logger/logger.gd b/Util/gs-logger-3.1-R3/gs_logger/logger.gd new file mode 100644 index 0000000..49dd634 --- /dev/null +++ b/Util/gs-logger-3.1-R3/gs_logger/logger.gd @@ -0,0 +1,277 @@ +""" +Class: Logger + A general purpose Logger for use with GDScript. + +Copyright: + Copyright 2018 SpockerDotNet LLC + +Remarks: + The Logger will send a request to an + Appender to output a log message. + +See Also: + Appender, Layout, Message +""" + +extends Node + +const CATEGORY_GENERAL = "general" +const CATEGORY_WARN = "warn" +const CATEGORY_ERROR = "error" +const CATEGORY_SYSTEM = "system" +const CATEGORY_INPUT = "input" +const CATEGORY_GUI = "gui" +const CATEGORY_SIGNAL = "signal" +const CATEGORY_BEHAVIOR = "behavior" +const CATEGORY_FSM = "fsm" +const CATEGORY_NETWORK = "network" +const CATEGORY_PHYSICS = "physics" +const CATEGORY_GAME = "game" +const CATEGORY_AUDIO = "audio" +const CATEGORY_CAMERA = "camera" + +const LOG_LEVEL_ALL = 999 +const LOG_LEVEL_FINE = 700 +const LOG_LEVEL_TRACE = 600 +const LOG_LEVEL_DEBUG = 500 +const LOG_LEVEL_INFO = 400 +const LOG_LEVEL_WARN = 200 +const LOG_LEVEL_ERROR = 100 +const LOG_LEVEL_FATAL = 001 +const LOG_LEVEL_NONE = 000 + + +const LOG_FORMAT_SIMPLE = 20 +const LOG_FORMAT_DEFAULT = 30 +const LOG_FORMAT_MORE = 90 +const LOG_FORMAT_FULL = 99 +const LOG_FORMAT_NONE = -1 + + +var logger_level = LOG_LEVEL_ALL setget set_logger_level +var logger_line = 0 +var logger_appenders = [] +var refresh_appenders = false +var version = "3.1-R3" + +# PUBLIC + + +func add_appender(appender): + if appender is Appender: + logger_appenders.append(appender) + + refresh_appenders = true + return appender + + +func set_logger_level(level): + + logger_level = level + print("Logging Level is %s" % [_get_level_name(logger_level)]) + print(" ") + + for appender in logger_appenders: + appender.logger_level = level + + +func set_logger_format(format): + for appender in logger_appenders: + appender.logger_format = format + + +static func get_level_name(level): + match level: + LOG_LEVEL_ALL: + return "ALL" + LOG_LEVEL_FINE: + return "FINE" + LOG_LEVEL_TRACE: + return "TRACE" + LOG_LEVEL_DEBUG: + return "DEBUG" + LOG_LEVEL_INFO: + return "INFO" + LOG_LEVEL_WARN: + return "WARN" + LOG_LEVEL_ERROR: + return "ERROR" + LOG_LEVEL_FATAL: + return "FATAL" + _: + return "NONE" + +""" +Function: log + Log a Message at the Info level. + +Remarks: + This is the Default level of logging. +""" +func info(message, category=CATEGORY_GENERAL): + _append(LOG_LEVEL_INFO, message, category) + + +""" +Function: fine + Log a Message at a Fine level. +""" +func fine(message, category=CATEGORY_GENERAL): + _append(LOG_LEVEL_FINE, message, category) + + +""" +Function: trace + Log a Message at a Trace level. +""" +func trace(message, category=CATEGORY_GENERAL): + _append(LOG_LEVEL_TRACE, message, category) + + +""" +Function: debug + Log a Message at a Trace level. +""" +func debug(message, category=CATEGORY_GENERAL): + _append(LOG_LEVEL_DEBUG, message, category) + + +""" +Function: warn + Log a Warning Message. +""" +func warn(message, category=CATEGORY_GENERAL): + _append(LOG_LEVEL_WARN, message, category) + + +""" +Function: error + Log an Error Message. +""" +func error(message, category=CATEGORY_GENERAL): + _append(LOG_LEVEL_ERROR, message, category) + + +""" +Function: fatal + Log an Error Message. +""" +func fatal(message, category=CATEGORY_GENERAL): + _append(LOG_LEVEL_FATAL, message, category) + +""" +Function: get_formatted_date + Returns a Date in a Formatted form for an Event. +""" +func get_formatted_date(date): + return _get_formatted_date(date) + + +# PRIVATE + + +func _get_formatted_date(date): + return "%02d/%02d/%02d %02d:%02d:%02d" % [date.month, date.day, date.year, date.hour, date.minute, date.second] + + +func _get_format_name(format): + match format: + LOG_FORMAT_FULL: + return "FULL" + LOG_FORMAT_MORE: + return "MORE" + LOG_FORMAT_DEFAULT: + return "DEFAULT" + LOG_FORMAT_SIMPLE: + return "SIMPLE" + _: + return "NONE" + + +func _get_level_name(level): + match level: + LOG_LEVEL_ALL: + return "ALL" + LOG_LEVEL_TRACE: + return "FINE" + LOG_LEVEL_FINE: + return "TRACE" + LOG_LEVEL_DEBUG: + return "DEBUG" + LOG_LEVEL_INFO: + return "INFO" + LOG_LEVEL_WARN: + return "WARN" + LOG_LEVEL_ERROR: + return "ERROR" + LOG_LEVEL_FATAL: + return "FATAL" + _: + return "NONE" + + +func _get_format_by_name(format_name): + match format_name.to_lower(): + "full": + return LOG_FORMAT_FULL + "more": + return LOG_FORMAT_MORE + "default": + return LOG_FORMAT_DEFAULT + "simple": + return LOG_FORMAT_SIMPLE + _: + return LOG_FORMAT_NONE + +func _get_logger_level_by_name(logger_level_name): + match logger_level_name.to_lower(): + "all": return LOG_LEVEL_ALL + "fine": return LOG_LEVEL_FINE + "trace": return LOG_LEVEL_TRACE + "debug": return LOG_LEVEL_DEBUG + "info": return LOG_LEVEL_INFO + "warn": return LOG_LEVEL_WARN + "error": return LOG_LEVEL_ERROR + "fatal": return LOG_LEVEL_FATAL + "none": return LOG_LEVEL_NONE + + + +func _append(level, message = "", category = CATEGORY_GENERAL): + + if logger_appenders.size() <= 0: + var ca = ConsoleAppender.new() + ca.logger_level = logger_level + logger_appenders.append(ca) + + if refresh_appenders: + refresh_appenders = false + for appender in logger_appenders: + appender.start() + appender.append_raw(appender.layout.getHeader()) + + logger_line += 1 + + for appender in logger_appenders: + if level <= appender.logger_level: + appender.append(Message.new(level, message, category, logger_line)) + + +func _exit_tree(): + for appender in logger_appenders: + appender.append_raw(appender.layout.getFooter()) + appender.stop() + + logger_appenders.clear() + + +func _init(): + print(" ") + print("godot-stuff Logger") + print("https://gitlab.com/godot-stuff/gs-logger") + print("Copyright 2018-2019, SpockerDotNet LLC") + print("Version " + version) + print(" ") + + if ProjectSettings.has_setting("logger/level"): + set_logger_level(_get_logger_level_by_name(ProjectSettings.get_setting("logger/level"))) diff --git a/Util/gs-logger-3.1-R3/gs_logger/message.gd b/Util/gs-logger-3.1-R3/gs_logger/message.gd new file mode 100644 index 0000000..274d37f --- /dev/null +++ b/Util/gs-logger-3.1-R3/gs_logger/message.gd @@ -0,0 +1,26 @@ + +""" +Class: Message + Simple representation of a Message to Append to a Logger + +Remarks: + A Layout will Format a message before it is sent to + its assigned Appender. + +""" +extends Reference +class_name Message + +var level: int +var text: String +var category: String +var line: int +var data + + +func _init(level=000, text="", category="general", line=0, data={}): + self.level = level + self.text = text + self.category = category + self.line = line + self.data = data diff --git a/project.godot b/project.godot index 259cb64..f4683b4 100644 --- a/project.godot +++ b/project.godot @@ -8,9 +8,50 @@ config_version=4 -_global_script_classes=[ ] +_global_script_classes=[ { +"base": "Reference", +"class": "Appender", +"language": "GDScript", +"path": "res://Util/gs-logger-3.1-R3/gs_logger/appender.gd" +}, { +"base": "Appender", +"class": "ConsoleAppender", +"language": "GDScript", +"path": "res://Util/gs-logger-3.1-R3/gs_logger/appenders/console_appender.gd" +}, { +"base": "Appender", +"class": "FileAppender", +"language": "GDScript", +"path": "res://Util/gs-logger-3.1-R3/gs_logger/appenders/file_appender.gd" +}, { +"base": "Layout", +"class": "HtmlLayout", +"language": "GDScript", +"path": "res://Util/gs-logger-3.1-R3/gs_logger/layouts/html_layout.gd" +}, { +"base": "Reference", +"class": "Layout", +"language": "GDScript", +"path": "res://Util/gs-logger-3.1-R3/gs_logger/layout.gd" +}, { +"base": "Reference", +"class": "Message", +"language": "GDScript", +"path": "res://Util/gs-logger-3.1-R3/gs_logger/message.gd" +}, { +"base": "Layout", +"class": "PatternLayout", +"language": "GDScript", +"path": "res://Util/gs-logger-3.1-R3/gs_logger/layouts/pattern_layout.gd" +} ] _global_script_class_icons={ - +"Appender": "", +"ConsoleAppender": "", +"FileAppender": "", +"HtmlLayout": "", +"Layout": "", +"Message": "", +"PatternLayout": "" } [application] @@ -19,6 +60,10 @@ config/name="retrace" run/main_scene="res://Level/PathTestWorld.tscn" config/icon="res://icon.png" +[autoload] + +Logger="*res://Util/gs-logger-3.1-R3/gs_logger/logger.gd" + [input] move_left={