Source code for src.core.logs
"""
Log Level explanation
**Critical** (50)
Errors where program cannot continue running (e.g., duplicate keys in database).
**Error** (40)
Failure in a function that prevents it from completing.
**Warning** (30)
Failure that should alert the user but does not halt the program (e.g., DB connection failed; retry possible).
**Success** (25)
Successful larger operations.
**Info** (20)
General purpose logs (e.g., “start importing file … / finished importing file …”).
**Debug** (10)
More frequent than Info; include additional state (e.g., open file).
**Trace** (5)
Log everything (calls, opened files, …).
"""
import sys
from loguru import logger
#TODO: doc pls, idk what this does
[docs]
def custom_format(record):
lvl = record["level"].no
if lvl == 50:
return "<b><fg #b22222>{time:YYYY-MM-DD HH:mm:ss.SSSZZ} | {level:^8} | Proc: {process:^8} | Thread: {thread: ^16} | Mod: {module:^8} | Func: {function:^20} | Line: {line:^4} | Message: {message}</></>\n"
elif lvl == 40:
return "<b><fg #F37676>{time:YYYY-MM-DD HH:mm:ss.SSSZZ} | {level:^8} | Proc: {process:^8} | Thread: {thread: ^16} | Mod: {module:^8} | Func: {function:^20} | Line: {line:^4} | Message: {message}</></>\n"
elif lvl == 30:
return "<fg #F37676>{time:YYYY-MM-DD HH:mm:ss.SSSZZ} | {level:^8} | Proc: {process:^8} | Thread: {thread: ^16} | Mod: {module:^8} | Func: {function:^20} | Line: {line:^4} | Message: {message}</>\n"
elif lvl == 25:
return "<green>{time:YYYY-MM-DD HH:mm:ss.SSSZZ} | {level:^8} | Line: {line:^4} | Message: {message}</>\n"
elif lvl == 20:
return "<white>{time:YYYY-MM-DD HH:mm:ss.SSSZZ} | {level:^8} | Line: {line:^4} | Message: {message}</>\n"
elif lvl == 10:
return "<fg #808080>{time:YYYY-MM-DD HH:mm:ss.SSSZZ} | {level:^8} | Mod: {module:^8} | Func: {function:^8} | Line: {line:^4} | Message: {message}</>\n"
elif lvl == 5:
return "<dim><fg #808080>{time:YYYY-MM-DD HH:mm:ss.SSSZZ} | {level:^8} | Proc: {process: ^8} | Thread: {thread: ^16} | Mod: {module: ^8} | Function: {function: ^20} | Line: {line:^4} | Message: {message}</></>\n"
[docs]
def setup_logging(
level: str = "INFO",
log_dir: str | None = None,
) -> None:
# Clear definition
logger.remove()
logger.add(sys.stderr , level=level, format= custom_format)
logger.info("Set Loglevel to: " + level)
if level == "TRACE" or level == "DEBUG":
logger.critical("Crit Test")
logger.error("Error test")
logger.warning("Warning test")
logger.success("Success test")
logger.info("Info test")
logger.debug("Debug test")
logger.trace("Trace test")