[Snippet] [devHelper] Logger
stableDescription
Here it is; the humble hunchback of the debugger: LOGGER.
Logger is a simple class object, which brings depth to debugging.
You can follow execution paths and trace bugs with precision.
Installation: Simply copy and paste the snippet to your project! Just make sure Logger and its functions are defined before they are used.
Functions:
* Logger:log() - Normal log, as long as logger level is set to [All].
* Logger:warn() - Warning log, as long as logger level is set to [All] or [Errors & Warnings].
* Logger:error() - Error log.
* Logger:enter() - Enter new scope. Will be added to the scope-path when logging messages.
* Logger:exit() - Exit the current scope. Will remove the latest entry from the scope-path.
Rest of the functions are for Logger's internal use only.
Usage:
-- normal log msg
Logger:log('we are in Main, and this only shows when we log All')
-- normal log msg with color
Logger:log('logger supports colors as well', Green)
function doSomething()
-- enter new scope
Logger:enter('doSomething')
-- log a warning
Logger:warn('this time we warn something at Main::doSomething')
-- exit current scope
Logger:exit()
end
doSomething()
-- log an error
Logger:error('execution stops here')
HaasScript
--===================================================================
-- == Logger
local LoggerLevels = {
ErrorsOnly = 'Errors Only',
ErrorsAndWarnings = 'Erorrs & Warnings',
All = 'All'
}
local Logger = {
_level = InputOptions('DEBUG Level',
LoggerLevels.All,
LoggerLevels,
{group = ' DEBUG'}),
_in = 'Main',
_prevIn = {},
_log = Log,
_warn = LogWarning,
_error = LogError
}
function Logger:level()
if Logger._level == LoggerLevels.ErrorsOnly then
return 0
elseif Logger._level == LoggerLevels.ErrorsAndWarnings then
return 1
elseif Logger._level == LoggerLevels.All then
return 2
end
LogError('Logger level undefined: "' .. Logger._level .. '"')
end
function Logger:where()
local ret = ''
local prevs = self._prevIn
if #prevs > 0 then
for i = 1, #prevs do
if prevs[i] != '' and #prevs[i] > 0 then
ret = ret .. prevs[i] .. '::'
end
end
end
return ret .. self._in
end
function Logger:enter(to)
self._prevIn = ArrayAdd(self._prevIn, self._in)
self._in = to
end
function Logger:exit()
self._in = ArrayLast(self._prevIn)
self._prevIn = ArrayPop(self._prevIn)
end
function Logger:log(msg, color)
if self:level() >= 2 then
if not color then
color = ''
end
local _in = Logger:where()
self._log('['.._in..'] '..msg, color)
end
end
function Logger:warn(msg)
if self:level() >= 1 then
local _in = Logger:where()
self._warn('['.._in..'] '..msg)
end
end
function Logger:error(msg)
local _in = Logger:where()
self._error('['.._in..'] '..msg)
end
--===================================================================
--===================================================================
0 Comments
Sign in to leave a comment.
No comments yet. Be the first!