如果我使用此代码:
static void Main()
{
A();
}
static void A()
{
B();
}
static void B()
{
C();
}
static void C()
{
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
Console.WriteLine(t);
}
我可以得到这个:
at test.MyClass.C()
at test.MyClass.B()
at test.MyClass.A()
at test.MyClass.Main()
但如果我想要更多这样的信息,我该怎么办? 在
test.MyClass.C() at Program.cs line 26
at test.MyClass.B() at Program.cs line 22
at test.MyClass.A() at Program.cs line 18
at test.MyClass.Main() at Program.cs line 12
看起来我的帖子主要是代码;所以我需要在这里输入更多的单词...
答案 0 :(得分:2)
是。您可以通过使用来电信息属性,获取有关方法调用方的信息以及所有相关的调试信息msdn link https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/caller-information。
public void TraceMessage(string message,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
System.Diagnostics.Trace.WriteLine("message: " + message);
System.Diagnostics.Trace.WriteLine("member name: " + memberName);
System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}
否则,如果您可以使用外部库来跟踪和记录每个信息,那么您可以使用http://logging.apache.org/log4net/,the文档也足够了。
答案 1 :(得分:1)
您可以使用一些特殊的(并且不是众所周知的)来电者信息属性参数,例如我有一个围绕我的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
日志文件输出:
ERROR XYZ.Tools.Emailing.Email - MemberName:SendEmail, SourceLineNumber为129,消息:通过Exchange发送电子邮件失败 服务器