我想写一个Visual Studio宏或类似的东西,可以获取函数名并插入到错误报告部分的预设位置。如果你看下面的例子就会更清楚
Class SampleClass
{
public void FunctionA()
{
try
{
//Do some work here
}
catch (Exception ex)
{
Logger.WriteLine(LogLevelEnum.Error, "SampleClass", "FunctionA Failed");
Logger.WriteLine(LogLevelEnum.Error, "FunctionA", ex.ToString());
}
finally
{
}
}
}因此,我遵循了我的通用库中大多数关键函数的类似模式。我希望能够在预构建过程中将"FunctionA“插入日志记录部分,这样我就不必记住输入正确的名称,或者在复制和粘贴后忘记重命名。可以从工具栏手动调用,也可以通过快捷键调用。
那么,我应该从哪里开始呢?
注意:我被认为是.Net的中级水平,已经用C#和VB写了3年多,但我对宏是个新手,尽管我不介意学习。不要担心代码本身和异常,这只是一个例子。
编辑:感谢Ovidiu Pacurar和cfeduke。我在这里想要的是一种改变和遗忘的方式。即使没有抛出异常,PostSharp也会在这些函数中的每一个上产生开销。从堆栈跟踪中挖掘是可行的,但在某些情况下,我也希望只记录"FunctionA Failed“,而不会花费太多处理来获取堆栈跟踪。此外,如果库是模糊的,堆栈跟踪将是隐秘的。
实际上,这个功能还有另一个需求,我之前忘记提过了。当库准备好交付时,我想通过引用一个表,将所有的函数名改为函数代码,"FunctionA“可能是"0001",以解决”混淆“日志的问题。
发布于 2008-10-30 17:17:24
看一下System.Diagnostics.StackTrace,然后您可以只创建一个从堆栈获取函数的日志调用。
发布于 2008-10-30 17:27:51
我希望C#有__FILE__和__LINE__-like宏,但是它没有,但是你可以使用PostSharp编译后的process C#。这样做的好处是,不必调用堆栈跟踪的开销来在运行时获取方法名称。在异常处理过程中,性能开销可能不是您关心的问题,但在任何情况下,PostSharp都是另一个可以执行该工作的工具。
PostSharp的示例视频所做的事情与您正在尝试做的事情类似。看看PostSharp站点首页上的这段示例代码,让您耳目一新:
public class SimplestTraceAttribute : OnMethodBoundaryAspect
{
public override void OnEntry( MethodExecutionEventArgs eventArgs)
{
Trace.TraceInformation("Entering {0}.", eventArgs.Method);
Trace.Indent();
}
public override void OnExit( MethodExecutionEventArgs eventArgs)
{
Trace.Unindent();
Trace.TraceInformation("Leaving {0}.", eventArgs.Method);
}
}发布于 2008-10-30 17:26:48
看看PostSharp吧。它允许你用非常简单的方法来做这件事。
还有一些带有日志记录的样本。
https://stackoverflow.com/questions/250973
复制相似问题