% % ----------------- % Copyright © 2024 ACK Cyfronet AGH, Poland. % ----------------- % % BASE_LOGGER A singleton logger class for logging messages to a file. % % This class implements a simple logging mechanism with different log levels % (TRACE, DEBUG, INFO, WARNING, ERROR) and writes log entries to a file. % It follows the Singleton pattern to ensure that only one instance of the logger % exists throughout the application. % % Properties: % fid - (private) The file identifier for the log file. This is used to write logs. % % Methods: % % getInstance() - Retrieves the singleton instance of the logger. % % trace(message) - Logs a message with TRACE level. % @param message The message to log. % % debug(message) - Logs a message with DEBUG level. % @param message The message to log. % % info(message) - Logs a message with INFO level. % @param message The message to log. % % warning(message) - Logs a message with WARNING level. % @param message The message to log. % % error(message) - Logs a message with ERROR level. % @param message The message to log. % % delete() - Destructor method that closes the file identifier when the logger is deleted. % % Example usage: % logger = base_logger.getInstance(); % logger.info('This is an info message'); % logger.error('This is an error message'); % % See also: fopen, fclose, dbstack, fprintf classdef base_logger < handle properties(Access=private) fid; end methods(Static, Access = public) function obj = getInstance() persistent instance; if isempty(instance) instance = base_logger(); end obj = instance; end end methods(Access=private) function this = base_logger() this.fid = fopen(getenv("DEFAULT_LOG_PATH"), 'a'); if this.fid == -1 error('Failed to open log file: application.log'); end end function log(this, level, message) current_time = strftime('%Y-%m-%d %H:%M:%S', localtime(time())); stack = dbstack('-completenames'); if length(stack) > 2 script_name = stack(3).name; else script_name = 'Unknown'; end if this.fid ~= -1 fprintf(this.fid, '%s %s %s %s\n', char(current_time), level, script_name, message); else error('File identifier is invalid. Cannot write to log.'); end end end methods(Access=public) function trace(this, message) this.log("TRACE", message); end function debug(this, message) this.log("DEBUG", message); end function info(this, message) this.log("INFO", message); end function warning(this, message) this.log("WARNING", message); end function error(this, message) this.log("ERROR", message); end function delete(this) if this.fid ~= -1 fclose(this.fid); end end end end