当前位置: 首页 > 面试题库 >

使用logger.debug()之前是否需要Log4j isDebugEnabled()?

壤驷瑾瑜
2023-03-14
问题内容

当我浏览一些代码时,我注意到使用logger的方式如下,

if(logger.isDebugEnabled())   
    logger.debug("Something..");

但是在某些代码中,我是这样观察的。

logger.debug("Something..");

当我查看log4j的源代码时,已检查debug()了Logger本身的方法
if(logger.isDebugEnabled())。那为什么我们需要这些不必要的开销呢if(logger.isDebugEnabled())


问题答案:

当传递给您的字符串logger.debug(...)花费时间评估时,这很有用,在这种情况下,如果未启用调试,则可以跳过此评估。

if(logger.isDebugEnabled()) {
    logger.debug("The meaning of life is " + calculateMeaningOfLife());
}

IMO使得代码的可读性大大降低,因此只有在性能有了显着提高时才应使用它。



 类似资料:
  • 我使用testAd ID(ca-app-pub-3940256099942544/1033173712)从admob不是我的admob ID,我需要使用addTestDevice()太,而在移动设备测试?它甚至显示了测试广告屏幕,而不是实时广告。 因为我这样做了,我整天都在使用我的应用程序进行测试,晚上我收到了账户暂停邮件。

  • 是否需要在之前调用?为什么?我看不出有什么不同,但我看到很多人这样做。

  • 问题内容: 我知道没有第一行就可以使用它,但实际上它经常包含在内。 是什么原因?没有它是否不安全? 我知道您也可以这样做: 但我说的是您需要一一添加项目的情况。 问题答案: 如果您未声明新数组,并且创建/更新数组的数据由于任何原因而失败,则将来尝试使用该数组的任何代码都将因为该数组不存在。 例如,如果未声明该数组且未添加任何值,将抛出错误。但是,如果数组只是空的,则不会发生任何错误,就像您声明它的

  • 问题内容: 假定以下代码,其中“ sock”是TCP套接字的句柄,该句柄先前已使用epfd指定的epoll文件描述符注册。 如果套接字无论如何都要随后关闭,是否仍然需要调用epoll_ctl?还是由于关闭套接字而隐式注销了套接字? 问题答案: 从手册页: Q6 关闭文件描述符会导致它自动从所有epoll集中删除吗? A6 是,但是请注意以下几点。文件描述符是对打开的文件描述的引用(请参阅(2))。

  • 问题内容: 众所周知,Windows使用带反斜杠的路径,而Unix使用带反斜杠的路径。node.js提供了始终使用正确的斜杠。因此,例如,您不必编写Unix,而只编写Unix 。 但是,似乎存在这种差异,但是如果您不对路径进行规范化(例如,使用path.join),而仅编写诸如node.js之类的路径,则在Windows上运行脚本没有问题。 那么,有没有写上任何好处了?无论平台如何,两者似乎都可以

  • 随着新的工具栏小部件的引入和AppCompat(android.support.v7.widget.Toolbar)版本的推出,是否还需要调用setSupportActionbar(工具栏)?或者调用setSupportActionbar有什么好处吗;现在我们可以设置标题、子标题、导航图标、导航图标单击侦听器(getSupportActionBar()。直接在工具栏上设置DisplayHomeAs