added Logger
This commit is contained in:
parent
1ff5c46027
commit
378b8e5ae5
52
WikiJam/Util/gs_logger/appender.gd
Normal file
52
WikiJam/Util/gs_logger/appender.gd
Normal file
@ -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
|
21
WikiJam/Util/gs_logger/appenders/console_appender.gd
Normal file
21
WikiJam/Util/gs_logger/appenders/console_appender.gd
Normal file
@ -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(" ")
|
32
WikiJam/Util/gs_logger/appenders/file_appender.gd
Normal file
32
WikiJam/Util/gs_logger/appenders/file_appender.gd
Normal file
@ -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(" ")
|
21
WikiJam/Util/gs_logger/layout.gd
Normal file
21
WikiJam/Util/gs_logger/layout.gd
Normal file
@ -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
|
61
WikiJam/Util/gs_logger/layouts/html_layout.gd
Normal file
61
WikiJam/Util/gs_logger/layouts/html_layout.gd
Normal file
@ -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 = \
|
||||
"""
|
||||
<html>
|
||||
<head>
|
||||
<title>Message Log</title>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h2>Godot Logger</h2>
|
||||
<table class="table table-condensed table-hover">
|
||||
<thead>
|
||||
<th>Number</th>
|
||||
<th>Message</th>
|
||||
</thead>
|
||||
"""
|
||||
|
||||
|
||||
var footer = \
|
||||
"""
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
func getHeader():
|
||||
return header
|
||||
|
||||
|
||||
func getFooter():
|
||||
return "</body>"
|
||||
|
||||
|
||||
func build(message: Message, format: int):
|
||||
return '<tr class="%s"><td style="width:100px"><span class="glyphicon glyphicon-edit" style="padding-right:10px"></span><span>%d</span></td><td>%s</td></tr>' % [contextual_classes[message.level], message.line, message.text]
|
||||
|
||||
|
44
WikiJam/Util/gs_logger/layouts/pattern_layout.gd
Normal file
44
WikiJam/Util/gs_logger/layouts/pattern_layout.gd
Normal file
@ -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]
|
||||
"""
|
||||
|
||||
|
||||
|
277
WikiJam/Util/gs_logger/logger.gd
Normal file
277
WikiJam/Util/gs_logger/logger.gd
Normal file
@ -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")))
|
26
WikiJam/Util/gs_logger/message.gd
Normal file
26
WikiJam/Util/gs_logger/message.gd
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user