Verwenden Sie denselben logging.Handler in verschiedenen HauptdateienPython

Python-Programme
Guest
 Verwenden Sie denselben logging.Handler in verschiedenen Hauptdateien

Post by Guest »

Prost!
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
Meine erste Hauptklasse ist manage.py:

Code: Select all

from mypath import log
logger = log.setup_logger(log.buffered_handler)
...
logger.info("Logs have been sent to the frontend.")
Meine zweite Hauptklasse ist generic_pictures.py (management/commands/generate_picutres.py)

Code: Select all

from another_relative_path import log
logger = log.setup_logger(log.buffered_handler)
...
logger.info("Picture has been created!")
Ich kann anscheinend nicht beide Hauptdateien dazu bringen, mit demselben Puffer im logging.handler-Objekt zu interagieren. Bei der Überprüfung der IDs jedes importierten Objekts log.buffered_handler stimmen sie nicht überein.
Was habe ich übersehen? Wie kann ich von beiden Dateien auf denselben Puffer zugreifen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post