相关疑难解决方法(0)

在log4j中,在记录改进性能之前检查isDebugEnabled吗?

我在我的应用程序中使用Log4J进行日志记录.以前我使用调试调用如:

选项1:

logger.debug("some debug text");
Run Code Online (Sandbox Code Playgroud)

但有些链接表明最好先检查一下isDebugEnabled(),例如:

选项2:

boolean debugEnabled = logger.isDebugEnabled();
if (debugEnabled) {
    logger.debug("some debug text");
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是" 选项2能否以任何方式提高性能? ".

因为在任何情况下Log4J框架都对debugEnabled进行相同的检查.对于选项2,如果我们在单个方法或类中使用多个调试语句可能是有益的,其中框架不需要isDebugEnabled()多次调用方法(在每次调用时); 在这种情况下,它只调用isDebugEnabled()一次方法,如果Log4J配置为调试级别,那么实际上它调用isDebugEnabled()方法两次:

  1. 如果为debugEnabled变量赋值,和
  2. 实际上是由logger.debug()方法调用的.

我不认为如果我们logger.debug()在方法或类中编写多个语句并debug()根据选项1 调用方法,那么与选项2相比,它是Log4J框架的开销.因为它isDebugEnabled()是一个非常小的方法(就代码而言),它可能是内联的好人选.

java logging log4j

192
推荐指数
7
解决办法
10万
查看次数

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

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

if(logger.isDebugEnabled())   
    logger.debug("Something..");
Run Code Online (Sandbox Code Playgroud)

但在某些代码中,我观察到了这样的情况.

logger.debug("Something..");
Run Code Online (Sandbox Code Playgroud)

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

java log4j

26
推荐指数
3
解决办法
2万
查看次数

如何检查 Java.util.logging 中启用的信息日志级别

如何在实际记录调试语句之前检查是否启用了某个日志记录级别?

java logging java.util.logging

5
推荐指数
1
解决办法
5518
查看次数

在使用 Logback 记录计算数据时,我们应该使用 isDebugEnabled() 吗?

尽管在一些教程中,例如这里参数化日志记录部分),说Logback消息{}参数化帮助我们避免日志记录数据中不必要的计算 (如果日志记录级别不是DEBUG):

logger.debug("The bonus for employee {} is {}", 
   employee.getName(), employeeService.calculateBonus(employee));
Run Code Online (Sandbox Code Playgroud)

我测试(在 logback 版本上1.2.3)该优化仅适用于不必要的toString()参数对象 - 因为这适用log4j

Logback文档不包含此细节。

那么,我们必须使用 isDebugEnabled() 来处理所有“昂贵”的日志记录,不是吗?

java logging logback

2
推荐指数
1
解决办法
3604
查看次数

标签 统计

java ×4

logging ×3

log4j ×2

java.util.logging ×1

logback ×1