Как другие говорили, что нет встроенного заполнителя для AssemblyName и несколько способов ее достижения, так или иначе. Еще один - зарегистрировать собственный обработчик/конвертер с помощью системы Log4Net.
В принципе, вы делаете то же самое, что и класс log4net.Util.PatternString (и вы можете проверить соответствующий исходный код для более полного «примера», чем приведенные ниже фрагменты).
Пример:
<file value="[ASSEMBLYNAME].log" type="MyExpressionHandler, MyAssembly"/>
Затем код:
введите код здесь
using log4net.Core;
public sealed class MyExpressionHandler : IOptionHandler
{
private string m_str;
public MyExpressionHandler(string str)
{
m_str = str;
}
public void ActivateOptions()
{
}
public string Format()
{
return m_str.Replace("[ASSEMBLYNAME]", /* ... whatever ... */);
}
}
Затем обеспечивают соответствие "конвертер класса".
internal class MyExpressionHandlerConverter : IConvertTo, IConvertFrom
{
public bool CanConvertTo(Type targetType)
{
return (typeof(string).IsAssignableFrom(targetType));
}
public object ConvertTo(object source, Type targetType)
{
MyExpression patternString = source as MyExpression;
if (patternString != null && CanConvertTo(targetType))
{
return patternString.Format();
}
throw ConversionNotSupportedException.Create(targetType, source);
}
public bool CanConvertFrom(System.Type sourceType)
{
return (sourceType == typeof(string));
}
public object ConvertFrom(object source)
{
string str = source as string;
if (str != null)
{
return new MyExpression(str);
}
throw ConversionNotSupportedException.Create(typeof(MyExpression), source);
}
}
И, наконец, сделать ваш конвертер известно рамках Log4Net:
ConverterRegistry.AddConverter(typeof(MyExpression), typeof(MyExpressionConverter));
NLog имеет переменную похожа на то, что я хочу: '$ {}' ProcessName –