Добавить контекстную информацию без изменения корневого регистратора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
Ответить

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

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

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

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

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