我需要一个轻量级的解决方案,它使我能够记录方法的输入和/或退出和/或异常。我希望能够配置:
Debug级别用于退出,Info级别用于入口,Error级别用于异常。让我们以这个方法为例:
public ObjectB MyFunc(int x, string s, ObjectA y)
{
// implementation
}然后,假设@Log是如此神奇的注释,您可以在MyFunc方法上使用这些@Log注释中的任何一个:
@Log // should be a reasonable default
@Log(EntryLevel = LogLevel.Info, ExitLevel = LogLevel.Debug) // makes sense to have ExceptionLevel = LogLevel.Error by default
@Log(EntryText = "{method}({methodArguments}) = ?", ExitText = "{method} = {methodResult}")
@Log(EntryText = "{method}({@x}, {@s}, ...)")其中:
{method}将被"MyFunc“取代{methodResult}将被方法结果的toString替换{@x}将被toString of x方法参数所取代。{@s}将被s方法参数的toString替换。{@y}将被y方法参数的toString替换。{methodArguments}将被类似于“x: {@s}**,s:** {@s}**,y:** {@y}**",或"**{@x}**,** {@s}**,** {@y}**"**,”这样的东西所取代,后者可以由布尔标志(如includeArgumentName )来管理。为了记录在案,在.NET中,我们使用了Log4PostSharp库的一个修改版本(由我们修改),它通过在编译阶段注入正确的字节码来完成上述所有工作。因此,我很清楚自己在寻找什么,尽管我完全不知道如何用Java来实现,也不知道这样的事情是否已经做过了。
谢谢。
编辑
我想谈一谈业绩问题。代码中可能包含大量的日志语句。当没有执行实际的日志记录时,执行这些语句不应导致任何明显的性能损失(例如,由于日志级别的限制)。
发布于 2011-12-04 14:45:49
你考虑过AspectJ吗?更多的细节在http://www.christianschenk.org/blog/logging-with-aspectj/和http://marxsoftware.blogspot.com/2008/10/logging-method-entryexit-with.html上。
发布于 2011-12-04 14:46:29
这听起来像是一个典型的AOP问题。Spring有一个相对容易使用的灵活解决方案,参见这里。
https://stackoverflow.com/questions/8376063
复制相似问题