Используйте один и тот же logging.Handler в разных основных файлах.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Используйте один и тот же logging.Handler в разных основных файлах.

Сообщение Anonymous »

Ура!
Я разрабатываю Django Projekt и хочу отображать свои серверные журналы на внешнем интерфейсе. Вот почему я создал центральный обработчик журналирования, который помещает журналы в буфер. Каждые 20 секунд мой интерфейс отправляет запрос на очистку буфера и отображение событий журнала.
Центральный класс журналирования (log.py):

Код: Выделить всё

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
Мой первый основной класс — это Manage.py:

Код: Выделить всё

from mypath import log
logger = log.setup_logger(log.buffered_handler)
...
logger.info("Logs have been sent to the frontend.")
Мой второй основной класс — этоgenerate_pictures.py (management/commands/generate_picutres.py)

Код: Выделить всё

from another_relative_path import log
logger = log.setup_logger(log.buffered_handler)
...
logger.info("Picture has been created!")
Кажется, мне не удается заставить оба основных файла взаимодействовать с одним и тем же буфером в объекте logging.handler. При проверке идентификаторов каждого импортированного объекта log.buffered_handler они не совпадают.
Что я пропустил? Как я могу получить доступ к одному и тому же буферу из обоих файлов?

Подробнее здесь: https://stackoverflow.com/questions/793 ... main-files
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»