apix/services/crawl4ai/app/grok/logger.py
Khoa.vo 2a4bf8b58b
Some checks are pending
CI / build (18.x) (push) Waiting to run
CI / build (20.x) (push) Waiting to run
feat: updates before deployment
2026-01-06 13:26:11 +07:00

60 lines
No EOL
1.7 KiB
Python

from typing import Optional
from datetime import datetime
from colorama import Fore
from threading import Lock
from time import time
class Log:
"""
Logging class to log text better in console.
"""
colours: Optional[dict] = {
'SUCCESS': Fore.LIGHTGREEN_EX,
'ERROR': Fore.LIGHTRED_EX,
'INFO': Fore.LIGHTWHITE_EX
}
lock = Lock()
@staticmethod
def _log(level, prefix, message) -> Optional[None]:
"""
Private log function to build the payload to print.
:param level: Just not used, only a filler
:param prefix: Prefix to indicate if its Success, Error or Info
:param message: Message to Log
"""
timestamp: Optional[int] = datetime.fromtimestamp(time()).strftime("%H:%M:%S")
log_message = (
f"{Fore.LIGHTBLACK_EX}[{Fore.MAGENTA}{timestamp}{Fore.RESET}{Fore.LIGHTBLACK_EX}]{Fore.RESET} "
f"{prefix} {message}"
)
with Log.lock:
print(log_message)
@staticmethod
def Success(message, prefix="[+]", color=colours['SUCCESS']) -> Optional[None]:
"""
Logging a Success message.
"""
Log._log("SUCCESS", f"{color}{prefix}{Fore.RESET}", message)
@staticmethod
def Error(message, prefix="[!]", color=colours['ERROR']) -> Optional[None]:
"""
Logging an Error Message.
"""
Log._log("ERROR", f"{color}{prefix}{Fore.RESET}", message)
@staticmethod
def Info(message, prefix="[!]", color=colours['INFO']) -> Optional[None]:
"""
Logging an Info Message.
"""
Log._log("INFO", f"{color}{prefix}{Fore.RESET}", message)