75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
|
#!/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",
|
||
|
)
|