Добавить контекстную информацию без изменения корневого регистратораPython

Программы на Python
Anonymous
Добавить контекстную информацию без изменения корневого регистратора

Сообщение Anonymous »

У меня есть специальный код библиотеки для записи файлов, который использует модуль журналирования, например:

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

import logging

logger = logging.getLogger(__name__)

class FileWriter:
def write():
logger.info("Writing..")
Тогда у меня есть разные классы, использующие этот FileWriter:

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

from util.file_writer import FileWriter

class NetworkHandler:
def __init__(self, ip):
self.ip = ip
self.file_writer = FileWriter()

def do_something(self):
self.file_writer.write("Some network data")

class UserInputHandler:
def __init__(self):
self.file_writer = FileWriter()

def process_input(self):
self.file_writer.write("Some response to user input")

if __name__ == "__main__":
network_handler = NetworkHandler("192.168.1.1")
network_handler.do_something()

user_input_handler = UserInputHandler()
user_input_handler.process_input()
Как я могу гарантировать, что сообщения журнала из FileWriter включают контекстную информацию из экземпляра NetworkHandler, например ip при вызове из do_something, но используют другое форматирование при вызове из Process_input, где эта информация () недоступен и не имеет смысла?
В документации модуля logging указано, что необходимо использовать контекстные переменные, но поскольку единственным общим родителем средств ведения журнала FileWriter и NetworkHandler является root, установка контекстного фильтра в корневом средстве ведения журнала также повлияет на средство ведения журнала UserInputHandler. Передача регистратора в FileWriter не является чистой, поскольку код может быть сторонней библиотекой. Также я хочу избежать использования «заполнителя» для ip в строке формата журнала.

Подробнее здесь: https://stackoverflow.com/questions/798 ... oot-logger

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