记录日志中的文件名,行号。我需要传递StackFrame吗?

时间:2011-05-20 16:24:22

标签: c# .net logging stackframe

目前,我通过StackFrame来获取当前文件/行号:

Log.Message(new StackFrame(0, true), "FAILED to start cooling.");

Log类中的位置是:

public void Message(StackFrame Callstack, string message)
{
    string logMessage = string.Format("{0} {1}:{2} {3} \t{4}", DateTime.Now.ToString(), Callstack.GetFileName(), Callstack.GetFileLineNumber(), Callstack.GetMethod(), message);

    //Write to console
    Console.WriteLine(logMessage);

    //write to file
}

我是否每次都需要将StackFrame传递给Log.Message()方法?这可以通过它自己的方法完成而不通过吗?有更简单的方法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

public void Message(string message) {
    StackFrame callstack = new StackFrame(1, true);
    // ...
}

1跳过callstack的Message方法部分并让它调用。

答案 1 :(得分:0)

你可以。 StackFrame的第一个构造函数参数定义要跳过的帧数。因此,在Message()内创建对象实例时,只需传递1,它就会显示调用框架(您使用Message()调用的地方)。