Вы не говорите, какую версию EntLib вы используете, но учитывая дату вашего поста, я приму EntLib 5.0.
Интересующая вас часть строки формата:
Extended Properties: {dictionary({key} - {value}{newline})}
Это часть общего шаблона форматирования «по умолчанию», найденного в вашем конфигурационном файле, как показано ниже:
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" template="Timestamp: {timestamp}{newline}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
Win32 ThreadId:{win32ThreadId}{newline}
Extended Properties: {dictionary({key} - {value}{newline})}" name="Text Formatter" />
</formatters>
Таким образом, вы можете видеть, что Extended Properties - это словарь, который будет автоматически повторяться Logger при создании записи журнала. Его цель - предоставить быстрый и грязный способ выгрузки дополнительного вывода, который может предоставить ваше приложение. Более полным способом было бы написать собственный форматировщик, в котором бы содержались токены для каждого из объектов, которые вы в противном случае добавили бы в Расширенные свойства.
Чтобы получить свойства в эту коллекцию, просто используйте соответствующую перегрузку
LogWriter.Write(..)
метод при внесении записи. У некоторых из них есть
IDictionary(key, string) properties
параметр, который можно использовать для предоставления этих значений.
Что касается номера строки и имени метода, их можно просто вставить в словарь, который вы предоставили выше. Получить их значения можно просто:
private void FillExtraLogInfo(IDictionary<string, object> info)
{
StackFrame stackFrame = new StackFrame(1, true);
info.Add("Method Name", stackFrame.GetMethod().ToString());
info.Add("Line Number" stackFrame.GetFileLineNumber());
}