Как войти в отдельные файлы на поток с Log4Net?

Относительно эти DictObj, следующее работало бы на Вас? Пустой класс позволит Вам произвольно добавлять к или материал замены в контейнерном объекте.

class Container(object):
    pass

>>> myContainer = Container()
>>> myContainer.spam = "in a can"
>>> myContainer.eggs = "in a shell"

, Если Вы хотите не бросить AttributeError, когда нет никакого атрибута, что Вы думаете о следующем? Лично, я предпочел бы использовать dict для ясности или использовать пункт попытки/кроме.

class QuietContainer(object):
    def __getattr__(self, attribute):
        try:
            return object.__getattr__(self,attribute)
        except AttributeError:
            return None

>>> cont = QuietContainer()
>>> print cont.me
None

Право?

6
задан Jens Bannmann 23 October 2009 в 09:25
поделиться

1 ответ

Способ log4net «выбирать» дополнения - фильтрация. В вашем сценарии вам понадобится способ настройки нескольких приложений, каждый из которых представляет четко определенный поток, и фильтры в каждом приложении, проходящие через сообщения только из соответствующего потока.

Поскольку идентификатор потока не является детерминированным, вы будете нужно что-то еще для фильтрации. Я предполагаю, что вы сами контролируете создание этих потоков, и предлагаю, чтобы каждый поток регистрировал идентификатор в свойстве в ThreadContext . Затем вы можете использовать PropertyFilter для фильтрации сообщений на основе идентификаторов.

Вот пример настройки конфигурации с двумя добавочными элементами, каждое добавляющее сообщение, в котором текущее значение свойства threadId совпадает с заданным идентификатором.

<appender name="x">
    <filter type="log4net.Filter.Property">
        <key value="threadId" />
        <stringToMatch value="threadX" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    ...
</appender>

<appender name="y">
    <filter type="log4net.Filter.Property">
        <key value="threadId" />
        <stringToMatch value="threadY" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    ...
</appender>

<root>
    <appender-ref name="x" />
    <appender-ref name="y" />
</root>
4
ответ дан 17 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: