Building Custom Log Sinks

Custom sinks need to implement the Sink protocol.

File Sink

from datetime import datetime

class FileSink(Sink):
    def __init__(self, filepath: str):
        self.filepath = filepath
        self.file = None

    def open(self) -> None:
        self.file = open(self.filepath, "a")

    def close(self) -> None:
        self.file.close()

    async def write(self, records: list[Record]) -> None:
        for record in records:
            line = f"[{record.level}] {record.message}\n"
            self.file.write(line)

# Register while creating app
app = Stario(log_sinks=[FileSink("/var/log/app.log")])