Это должно сработать, это немного работы и основано на ответе от комплекта здесь .
Перед звонком XmlConfigurator.Configure();
добавить
ConverterRegistry.AddConverter(typeof(InstancePatternString), typeof(InstancePatternStringConverter));
Затем добавьте следующие классы к вашему решению:
public class InstancePatternString : PatternString
{
public InstancePatternString(string pattern): base(pattern)
{
}
public override void ActivateOptions()
{
AddConverter("cs", typeof(InstancePatternConverter));
base.ActivateOptions();
}
}
public class InstancePatternConverter : PatternConverter
{
override protected void Convert(TextWriter writer, object state)
{
switch(Option)
{
case "instance":
writer.Write(MyContext.Instance);
break;
}
}
}
public class InstancePatternStringConverter : IConvertTo, IConvertFrom
{
public bool CanConvertFrom(Type sourceType)
{
return sourceType == typeof(string);
}
public bool CanConvertTo(Type targetType)
{
return typeof(string).IsAssignableFrom(targetType);
}
public object ConvertFrom(object source)
{
var pattern = source as string;
if (pattern == null)
throw ConversionNotSupportedException.Create(typeof(InstancePatternString), source);
return new InstancePatternString(pattern);
}
public object ConvertTo(object source, Type targetType)
{
var pattern = source as PatternString;
if (pattern == null || !CanConvertTo(targetType))
throw ConversionNotSupportedException.Create(targetType, source);
return pattern.Format();
}
}
Обязательно измените MyContext.Instance
здесь на статически доступное свойство, представляющее ваш экземпляр.
Наконец, измените ваш web.config с:
<file value=????How to specify this????? />
до:
<file type="ConsoleApp.InstancePatternString, ConsoleApp" value="%cs{instance}\Reporting.log" />
Где ConsoleApp - это сборка, в которую вы добавили эти классы. Это приведет к созданию файлов журнала в отдельных каталогах экземпляров. т.е. 1 \ Reporting.log, 2 \ Reporting.log и т. д.
Преимущество этого подхода состоит в том, что добавление будущих свойств довольно просто и требует лишь добавления в оператор switch, чтобы его можно было использовать в любых будущих именах файлов / местах журналов.