2012-08-29 2 views
0

Есть ли способ захватить имя функции и имя файла, когда я внутри функции? Я пытаюсь добавить лог-файлы повсюду, как это так, и вы хотите, чтобы иметь возможность просто скопировать и Пастер моей логфайл строки кода в некоторых функций:Захват функции и имени файла в C#

public class NewCorrGenerator 
{ 
    public void Start() 
    { 
     bool rc = true; 

     myLogFile.InfoToFileWithTime("NewCorrGenerator - Start", appContext); 

     etc..... 
    } 
} 

Как вы можете видеть, есть ли способ захватить имя класса и имя функции в строке и вывести его в функцию myLogFile?

+1

Вы можете использовать .net 4.5? –

+0

no still on 3.5 – cdub

+0

Мне очень хотелось бы посмотреть, есть ли новый способ для этого .net 4.5 –

ответ

1

Вы можете использовать GetCurrentMethod. Это вернет объект типа MethodBase. Свойство Name, чтобы получить имя метода. DeclaringType предоставит вам класс. Это не то же самое, что имя файла, но оно должно быть близко, если вы используете один тип для каждого файла.

+0

ладно, это то, что мне нужно, lemme test – cdub

0

То, что вам нужно, называется перехватчиком. Наиболее популярной основой для этого является PostSharp. Это коммерческий продукт, который сделает все, что вам нужно. Если вы хотите написать свой собственный, попробуйте найти this article

1

Вы можете использовать System.Diagnostics.StackTrace и System.Diagnostics.StackFrame классы для получения информации о исполняемой в данный момент код:

var trace = new StackTrace(true); 
var frame = trace.GetFrame(0); // current frame 
var lineNumber = frame.GetFileLineNumber(); 
var method = frame.GetMethod().Name; 
var className = frame.GetMethod().ReflectedType.Name; 
0

Вы можете использовать отражение, чтобы получить то, что вам нужно. Вот способ получить имя метода: Retrieving the calling method name from within a method

Я бы подумал о том, чтобы сделать что-то еще - либо перехват, либо генерацию кода, в котором содержатся имена класса/метода hardcodes. Если вы в конечном итоге используете StackTrace, это может быть хорошей идеей объединить код ведения журнала с директивами отладки компилятора.

Смежные вопросы