Ich entwickle ein Django-Projekt und möchte meine Backend-Protokolle im Vordergrund anzeigen. Aus diesem Grund habe ich einen zentralen Protokollierungshandler erstellt, der Protokolle in einen Puffer schiebt. Alle 20 Sekunden sendet mein Frontend eine Anfrage, den Puffer zu leeren und die Protokollereignisse anzuzeigen.
Zentrale Protokollierungsklasse (log.py):
Code: Select all
import logging
class BufferedLogHandler(logging.Handler):
def __init__(self):
super().__init__()
self.log_buffer = [] # Lokaler Puffer für Logs
def emit(self, record):
log_entry = self.format(record) # Format den Log-Eintrag
self.log_buffer.append(log_entry)
def create_external_log(self, level=None, timestamp=None, message=None):
asctime = timestamp
msg = message
record = logging.LogRecord(
level=level,
msg=msg,
asctime=asctime,
lineno=0,
exc_info=None,
args=None,
name= None,
pathname="frontend",
)
self.emit(record=record)
return BufferedLogHandler.create_empty_response()
def flush_buffer(self):
logs_to_send = self.log_buffer[:]
print(f'logs_to_send:{logs_to_send}')
print("---------------------")
self.log_buffer = []
return logs_to_send
@staticmethod
def create_empty_response():
response = {'message':""}
return response
buffered_handler = BufferedLogHandler()
def setup_logger(bufferedHandler):
# Den Logger holen (Root-Logger oder benannten Logger)
logger = logging.getLogger() # Du kannst auch den Root-Logger verwenden
# Setze das Log-Level (z.B. DEBUG, INFO)
logger.setLevel(logging.DEBUG)
# Erstelle einen Handler (z.B. für Konsole oder Datei)
file_handler = logging.FileHandler('myapp.log') # Für eine Log-Datei
# Erstelle ein Format für die Log-Nachrichten
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - %(lineno)d - %(message)s')
# Setze das Format für beide Handler
bufferedHandler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# Füge beide Handler dem Logger hinzu
logger.addHandler(buffered_handler)
logger.addHandler(file_handler)
return logger
Code: Select all
from mypath import log
logger = log.setup_logger(log.buffered_handler)
...
logger.info("Logs have been sent to the frontend.")
Code: Select all
from another_relative_path import log
logger = log.setup_logger(log.buffered_handler)
...
logger.info("Picture has been created!")
Was habe ich übersehen? Wie kann ich von beiden Dateien auf denselben Puffer zugreifen?