Я пытаюсь создать решение для регистрации, которое включает несколько процессов на нескольких машинах. Я планировал использовать UDPAppender для отправки всех сообщений журнала на одну машину, которая будет управлять ими. У меня есть несколько вопросов о patternstrings vs patternlayouts.
Поскольку мне нужно знать, какой из машин и какой процесс вышло из сообщения журнала, я хочу включить его в журнал. Я нашел% property {log4net: HostName} для имени хоста, и это отлично работает. Однако я не вижу ничего для идентификатора процесса в PatternLayouts. Я, конечно, вижу что-то подобное в PatternString. Из FAQ:
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="log-file-[%processid].txt" />
<layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
</appender>
Но я не уверен, что или как смешивать и сопоставлять два (или даже если это канонический способ сделать это).
Итак, мои вопросы:
-
В чем разница между PatternString и PatternLayout? Почему оба?
-
Я вижу% processid в PatternString, как мне получить то же самое в PatternLayout? Вот мой тестовый макет:
<layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] [%property{log4net:HostName}] %-5level %logger - %message%newline" /> </layout>
-
Наконец, имеет смысл использовать макет XML для UDP-приложения. Похоже, что XmlLayoutSchemaLog4j уже добавляет HostNameProperty в XML-сообщение. Если я не хочу добавить этот новый идентификатор процесса (и, возможно, имя процесса) в XML-сообщение, что это лучший способ сделать это? Должен ли я просто скопировать src\Layouts\XmlLayoutSchemaLog4j.cs, изменить его и сообщить log4net, что я создал этот новый макет (например, SampleLayoutsApp)?
Спасибо за помощь