调试登录Scala,没有性能影响 [英] Debug log in Scala with no performance impact

查看:122
本文介绍了调试登录Scala,没有性能影响的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在诸如C / C ++ / Objective-C之类的语言中,通常使用预处理器宏定义甚至不为已发布的二进制文件编译的日志记录机制,从而不会导致性能下降。以下行:

  #ifdef DEBUG 
printf(some event we want to log\\\
);
#endif

现在,我知道Scala中没有预处理器。所以我的问题是:实现一个机制来记录程序活动以进行调试的最好方法是什么,当关闭时至少影响性能?

解决方案

您可以使用 scala.annotation.elidable


可以删除调用方法的注释生成的代码。



行为受到将-Xelide-below传递给scalac的影响。如果给予注释的优先级低于命令行参数,则标记为elidable的方法将从生成的代码中省略。示例:



In languages like C/C++/Objective-C it's common to use preprocessor macros to define logging mechanisms that are not even compiled for released binaries, thus causing no performance hit. Something along the lines of:

#ifdef DEBUG
printf("some event we want to log\n");
#endif

Now, I know there's no preprocessor in Scala. So my question is: what is the best way to implement a mechanism to log program activity for debug purposes, while impacting performance the least when it's turned off?

解决方案

You can use scala.annotation.elidable

An annotation for methods for which invocations might be removed in the generated code.

Behavior is influenced by passing -Xelide-below to scalac. Methods marked elidable will be omitted from generated code if the priority given the annotation is lower than to the command line argument. Examples:

这篇关于调试登录Scala,没有性能影响的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆