Даже после написания единственного XSD-файла для конфигурации log4net Я до сих пор не знаю простого способа добиться этого.
Вы можете сделать что-то вроде:
log4net.GlobalContext.Properties["host"] = new ClassThatToStringsHost();
class ClassThatToStringsHost
{ public override string ToString() { return "whatever"; } }
Теперь вы можете ссылаться на это значение в формате журнала следующим образом: "% property {host}"
Для выполнения фильтрации вам потребуется использовать конфигурацию фильтра в адаптере (ах):
<appender name="file" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.PropertyFilter">
<Key value="host" />
<StringToMatch value="whatever" />
</filter>
<!-- Anything not accepted by the above should be excluded -->
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
Там может быть даже встроенное свойство, которое вы можете использовать, и это должно работать. Смотрите также этот пост: http://geekswithblogs.net/rgupta/archive/2009/03/03/dynamic-log-filenames-with-log4net.aspx
Для себя, я и я ... Я бы подошел к этому по-другому. Я бы получил свой собственный SMTP-приложение из значения по умолчанию, а в методе ActivateOptions () я настроил бы значения в соответствии со средой. Это позволит вам использовать одного SMTP-приложения с согласованными правилами и в то же время предоставить три открытых свойства для каждого из адресов электронной почты, с которых вы хотите отправлять сообщения. Это не сложно, попробуйте!