PyBase/Utils/SimpleLogger.py

139 lines
4.7 KiB
Python
Raw Permalink Normal View History

2025-12-26 12:03:15 -05:00
# Copyright 2025, Niquel Mendoza.
# https://www.mql5.com/es/users/nique_372
2025-12-26 19:35:12 -05:00
# SimpleLogger.py
2025-12-26 12:03:15 -05:00
2025-12-26 19:35:12 -05:00
#+------------------------------------------------------------------+
#| Imports |
#+------------------------------------------------------------------+
2025-12-26 12:03:15 -05:00
import inspect
2025-12-26 19:35:12 -05:00
from . import Funciones
2025-12-26 12:03:15 -05:00
#+------------------------------------------------------------------+
#| Base Logging Class with Flag System |
#+------------------------------------------------------------------+
class CLoggerBase:
#--- Defines nivels value
LOG_LEVEL_ERROR = 1 # 0001 - Critical errors
LOG_LEVEL_WARNING = 2 # 0010 - Warnings
LOG_LEVEL_INFO = 4 # 0100 - General information
LOG_LEVEL_CAUTION = 8 # 1000 - Cautions
LOG_ALL = (LOG_LEVEL_CAUTION|LOG_LEVEL_INFO|LOG_LEVEL_WARNING)
#--- Defines niveles name
WARNING_TEXT = "WARNING"
CAUTION_TEXT = "CAUTION"
INFO_TEXT = "INFO"
ERROR_TEXT = "ERROR"
CRITICAL_ERROR_TEXT = "CRITICAL ERROR"
FATAL_ERROR_TEXT = "FATAL ERROR"
@staticmethod
2025-12-26 19:35:12 -05:00
def FastLog(function : str, class_info : str, message : str) -> None:
2025-12-26 12:08:26 -05:00
print(f"[{class_info}] {function} | {message}")
2025-12-26 19:35:12 -05:00
2025-12-26 12:03:15 -05:00
#--- Funcion de incilizacion
def __init__(self):
self.m_log_flags = CLoggerBase.LOG_LEVEL_ERROR
self.m_last_flags = CLoggerBase.LOG_LEVEL_ERROR
self.m_warning_enable = False
self.m_caution_enable = False
self.m_info_enable = False
self.UpdateLogLevels()
#---
2025-12-26 19:35:12 -05:00
def RemoveFlag(self, flags : int) -> None:
2025-12-26 12:03:15 -05:00
self.m_log_flags &= ~flags;
def UpdateLogLevels(self) -> None:
self.m_warning_enable = (self.m_log_flags & CLoggerBase.LOG_LEVEL_WARNING) != 0
self.m_info_enable = (self.m_log_flags & CLoggerBase.LOG_LEVEL_INFO) != 0
self.m_caution_enable = (self.m_log_flags &CLoggerBase.LOG_LEVEL_CAUTION) != 0
#---
2025-12-26 19:35:12 -05:00
def LogWarning(self, message : str) -> None:
if(self.m_warning_enable):
CLoggerBase.FastLog(inspect.currentframe().f_back.f_code.co_name, CLoggerBase.WARNING_TEXT, message)
2025-12-26 12:03:15 -05:00
2025-12-26 19:35:12 -05:00
def LogInfo(self, message : str) -> None:
if(self.m_info_enable):
CLoggerBase.FastLog(inspect.currentframe().f_back.f_code.co_name, CLoggerBase.INFO_TEXT, message)
2025-12-26 12:03:15 -05:00
2025-12-26 19:35:12 -05:00
def LogCaution(self, message : str) -> None:
if(self.m_caution_enable):
CLoggerBase.FastLog(inspect.currentframe().f_back.f_code.co_name, CLoggerBase.CAUTION_TEXT, message)
2025-12-26 12:03:15 -05:00
#---
@staticmethod
2025-12-26 19:35:12 -05:00
def LogError(message : str)-> None:
CLoggerBase.FastLog(inspect.currentframe().f_back.f_code.co_name, CLoggerBase.ERROR_TEXT, message)
2025-12-26 12:03:15 -05:00
@staticmethod
2025-12-26 19:35:12 -05:00
def LogFatalError(message : str)-> None:
CLoggerBase.FastLog(inspect.currentframe().f_back.f_code.co_name, CLoggerBase.FATAL_ERROR_TEXT, message)
2025-12-26 12:03:15 -05:00
@staticmethod
2025-12-26 19:35:12 -05:00
def LogCriticalError(message : str )-> None:
CLoggerBase.FastLog(inspect.currentframe().f_back.f_code.co_name, CLoggerBase.CRITICAL_ERROR_TEXT, message)
2025-12-26 12:03:15 -05:00
#--- Methods to check if a flag is active
def IsWarningLogEnabled(self) -> bool:
return self.m_warning_enable
def IsInfoLogEnabled(self) -> bool:
return self.m_info_enable
def IsCautionLogEnabled(self) -> bool:
return self.m_caution_enable
#--- Getters
def LogFlags(self) -> int:
return self.m_log_flags
2025-12-26 19:35:12 -05:00
def IsLogEnabled(self, flag : int) -> bool:
2025-12-26 12:03:15 -05:00
return (self.m_log_flags & flag) != 0
#--- Main configuration using flags
def ResetLastStateFlags(self) -> None:
self.m_log_flags = self.m_last_flags;
2025-12-26 19:35:12 -05:00
def AddLogFlags(self, flags : int):
2025-12-26 12:03:15 -05:00
self.m_last_flags = self.m_log_flags
self.m_log_flags |= flags
self.UpdateLogLevels()
2025-12-26 19:35:12 -05:00
def RemoveLogFlags(self, flags : int):
2025-12-26 12:03:15 -05:00
self.m_last_flags = self.m_log_flags
safe_flags = flags & ~CLoggerBase.LOG_LEVEL_ERROR
self.RemoveFlag(safe_flags)
self.m_log_flags |= CLoggerBase.LOG_LEVEL_ERROR
self.UpdateLogLevels()
#--- Disbale and Enable all logs
def EnableAllLogs(self) -> None:
self.m_log_flags |= CLoggerBase.LOG_ALL
self.UpdateLogLevels()
def DisableAllLogs(self) -> None:
self.m_log_flags = CLoggerBase.LOG_LEVEL_ERROR
self.UpdateLogLevels()
2025-12-26 19:35:12 -05:00
# def Main():
# object = CLoggerBase()
# object.EnableAllLogs()
# object.LogWarning()
# object.LogWarning("Hola con advertencia" , CLoggerBase.FUNCION_ACTUAL())
# object.LogInfo("Hola con info" , CLoggerBase.FUNCION_ACTUAL())
2025-12-26 12:03:15 -05:00
2025-12-26 12:08:26 -05:00
2025-12-26 12:03:15 -05:00