Добавьте logline, который указывает, из какого метода вызывается метод ведения журнала. - PullRequest
0 голосов
/ 23 мая 2019

Я добавляю логи в мои проекты. Журнал показывает метку времени + текущий метод + текущую программу. Я знаю, как проверить текущий метод, но это всегда будет сам метод регистрации. Как найти метод, вызвавший метод ведения журнала?

Кодированный прикрепленный делает именно то, что я хочу. Но было бы неплохо добавить часть, которая дает текущий метод и проект (this.GetType (). Name + currentMethodName) в фактический метод LogMessageToFile.

      LOGGER.cs


      using System.IO;

      using System;

      namespace LoggerSpace

      {

      class Logger { 

       public string GetTempPath()

       {
    string path = System.Environment.GetEnvironmentVariable("TEMP");
    if (!path.EndsWith("\\")) path += "\\";
    return path;

}

public void LogMessageToFile(string msg)
{
    System.IO.StreamWriter sw = System.IO.File.AppendText(
        GetTempPath() + "My Log File.txt");

        Console.Write(GetTempPath());
        try
    {
        string logLine = System.String.Format(
            "{0:G}: {1}.", System.DateTime.Now, msg);
        sw.WriteLine(logLine);
    }
    finally
    {
        sw.Close();
    }
}

      }

      }







      CODEwithADDEDlogging.cs

      using LoggerSpace;

      using System.Diagnostics;


      private void button2_Click(object sender, EventArgs y)
    {


        //LOG PART 
        var st = new StackTrace();
        var sf = st.GetFrame(0);
        var currentMethodName = sf.GetMethod();


        var instance = new Logger();
        instance.LogMessageToFile("Button Clicked, Clicktrader, from:"+ this.GetType().Name+ currentMethodName);


    }

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Используйте для этого CallerMemberNameAttribute .Примерно так:

void LogSomething(string message, [CallerMemberName]string caller="")
{
    // caller will have the function or property name of the caller to LogSomething
}

Вы также можете получить имя исходного файла и номер строки с другими атрибутами, все они описаны в ссылке.

0 голосов
/ 23 мая 2019
    public void LogMessageToFile(string msg,
        [CallerMemberName]string propertyName = null
        [CallerFilePath] string sourceFilePath = ""
        [CallerLineNumber] int sourceLineNumber = 0)
    {
    }

позволяет перехватить вызывающую функцию, файл, из которого она была вызвана, и номер строки в этом файле.

...