Существует несколько специальных (и не очень известных) параметров атрибута информации о вызывающем абоненте, которые вы можете использовать, например, у меня есть оболочка вокруг моей реализации Log4Net для получения номеров строк источника:
//I enhance the Log4Net logging by capturing the caller's name and the line of code number
public static void Error(Type source, object message, Exception e = null, [CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0)
{
ILog logger = getLogger(source);
if (!logger.IsErrorEnabled) return;
if (e == null)
logger.Error(string.Format("MemberName: {0}, SourceLineNumber of {1}, Message: {2}", memberName, sourceLineNumber, message));
else
logger.Error(string.Format("MemberName: {0}, SourceLineNumber of {1}, Message: {2}", memberName, sourceLineNumber, message), e);
}
Эти атрибутынеобязательные параметры позволяют нам получить имя члена, путь к файлу и номер строки источника:
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0
Вывод файла журнала:
ОШИБКА XYZ.Tools.Emailing.Email - MemberName: SendEmail, SourceLineNumber of 129, Сообщение: сбой отправки электронной почты через сервер Exchange.