使用 CallerMemberNameAttribute 类获取堆栈信息
简介
在项目中需要在打印日志同时打印堆栈信息,通常使用 StackTrace 来捕获堆栈信息,并跟随日志一同打印,但是生产环境部署通常使用 Release 方式打包,这会导致 StackTrace 方法失效。测试改用 CallerMemberNameAttribute 方式可以解决。
代码
StackTrace 方式获取堆栈信息
1 2 3 4 5 6 7 8 9
| public static void SaveError(string message) { var stackTrace = new StackTrace(true); var stackFrame = stackTrace.GetFrame(1); if (stackFrame != null) { logger.Error($"[{stackFrame?.GetMethod()?.DeclaringType?.Name}][{stackFrame?.GetMethod()?.Name}] {message}"); } }
|
CallerMemberNameAttribute 改用方式获取堆栈信息
1 2 3 4 5 6 7
| public static void SaveError(string message, [System.Runtime.CompilerServices.CallerMemberName] string memberName = "", [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "", [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0) { logger.Error($"[{System.IO.Path.GetFileName(sourceFilePath)}][{memberName}] {message}"); }
|