278 lines
5.5 KiB
GDScript
278 lines
5.5 KiB
GDScript
"""
|
|
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")))
|