1
0
Fork 0
containerctl/generate/log.py

75 lines
1.9 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""Implement a simple logging framework."""
import datetime
from pathlib import Path
from typing import TypeAlias
UNKNOWN = -1
ERROR = 0
WARNING = 1
INFO = 2
DEBUG = 3
LogLevel: TypeAlias = int
class Log:
"""Class for Logging."""
level: LogLevel = ERROR
messages: list = []
logfile: Path
def __init__(self, path: str) -> None:
"""Init for Log."""
if path == "":
path = "/dev/stdout"
self.logfile = Path(path)
def log_error(self, msg: str) -> None:
"""Log an error."""
if self.level >= ERROR:
now = self.timestamp()
prefix = "EE"
log_message = f"[{now}] ({prefix}) {msg}"
self.write_message(log_message)
def log_warning(self, msg: str) -> None:
"""Log a warning."""
if self.level >= WARNING:
now = self.timestamp()
prefix = "WW"
log_message = f"[{now}] ({prefix}) {msg}"
self.write_message(log_message)
def log_info(self, msg: str) -> None:
"""Log an information."""
if self.level >= INFO:
now = self.timestamp()
prefix = "II"
log_message = f"[{now}] ({prefix}) {msg}"
self.write_message(log_message)
def log_debug(self, msg: str) -> None:
"""Log a debug message."""
if self.level >= DEBUG:
now = self.timestamp()
prefix = "DD"
log_message = f"[{now}] ({prefix}) {msg}"
self.write_message(log_message)
def write_message(self, msg: str) -> None:
"""Write the message."""
print(msg)
if self.logfile == Path("/dev/stdout"):
return
with self.logfile.open("a+") as f:
f.write(msg)
def timestamp(self) -> str:
"""Log timestamp."""
return datetime.datetime.now(tz=datetime.UTC).strftime(
"%Y-%m-%d %H:%M:%S",
)