gpt4 book ai didi

java - 是否有为日志记录添加注释的 Java 库?

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:34 24 4
gpt4 key购买 nike

是否有任何库允许仅通过添加注释来记录变量?例如:

    @Log
String someValueToLog = someMethod();

@Log(level="debug", prefix="Here's the value=")
String someValueToLogAgain = someMethod();

其功能类似于在代码中添加这一行:

    log.info(someValueToLog);
log.debug("Here's the value=" + someValueToLogAgain);

最佳答案

我创建了一个名为 log-weaver 的项目,其中引入了一些@LogXXX语句。
当您编译一个使用这些注释之一的项目时,日志语句被编织到字节码中。
示例源代码:

@LogEnteringAndExiting(value={"arg1", "this"})
public String execute(String arg1) {
/*Some logic*/
return "done";
}

源代码将保持原样,但字节码看起来就像源代码是这样写的:

private static final Logger comGithubHervian_LOGGER = LoggingHelper.getLogger(ClassWithLogAnnotatedMethods.LogAround_log1ArgumentAndThis.class);
private static final String = comGithubHervian_CLASSNAME = ClassWithLogAnnotatedMethods.LogAround_log1ArgumentAndThis.class.getName();

public String execute(String arg1) {
if (LoggingHelper.isEntryExitTraceEnabled((Logger)comGithubHervian_LOGGER)) {
comGithubHervian_LOGGER.entering(comGithubHervian_CLASSNAME, "execute", new Object[]{arg1, this});
}
/*Some logic*/
String string = "done";
if (LoggingHelper.isEntryExitTraceEnabled((Logger)comGithubHervian_LOGGER)) {
comGithubHervian_LOGGER.exiting(comGithubHervian_CLASSNAME, "execute", string);
}
return string;
}

在上面的代码中,LoggingHelper 是来自 IBM 的 WebpShere Commerce 的一个特殊类,为此开发了这个概念证明。

这个想法是通过删除琐碎的语句来简化源代码,在本例中是日志记录。
整体逻辑如下:

  1. AbstractProcessor 检测其中一个日志注释的使用情况,并创建一些有用的数据结构,以保存有关方法名称、参数等的信息。
  2. AbstractProcessor 在编译器 (Javac) 中注册一个 TaskListener。
  3. TaskListener 使用 Javassist 将日志语句编织到给定方法/类的字节代码中。

请注意,当前项目是为与 IBM 的 WebSphere Commerce 一起使用而设计的,但您可以轻松地对其进行调整,例如将您自己选择的日志语句编织到代码中。

关于java - 是否有为日志记录添加注释的 Java 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12262824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com