首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找轻量级但灵活的解决方案,以便用log4j记录方法的输入和退出(可能是异常)

寻找轻量级但灵活的解决方案,以便用log4j记录方法的输入和退出(可能是异常)
EN

Stack Overflow用户
提问于 2011-12-04 14:42:30
回答 2查看 740关注 0票数 2

我需要一个轻量级的解决方案,它使我能够记录方法的输入和/或退出和/或异常。我希望能够配置:

  • 入口/退出/异常日志级别。例如,我可能将Debug级别用于退出,Info级别用于入口,Error级别用于异常。
  • 入口/退出/异常日志消息。日志消息应该允许我引用方法名称、方法参数和方法结果。

让我们以这个方法为例:

代码语言:javascript
复制
public ObjectB MyFunc(int x, string s, ObjectA y)
{
  // implementation
}

然后,假设@Log是如此神奇的注释,您可以在MyFunc方法上使用这些@Log注释中的任何一个:

代码语言:javascript
复制
@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来实现,也不知道这样的事情是否已经做过了。

谢谢。

编辑

我想谈一谈业绩问题。代码中可能包含大量的日志语句。当没有执行实际的日志记录时,执行这些语句不应导致任何明显的性能损失(例如,由于日志级别的限制)。

EN

回答 2

Stack Overflow用户

发布于 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上。

票数 1
EN

Stack Overflow用户

发布于 2011-12-04 14:46:29

这听起来像是一个典型的AOP问题。Spring有一个相对容易使用的灵活解决方案,参见这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8376063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档