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

使用Logback记录计算的数据时,是否应该使用isDebugEnabled()?

白博赡
2023-03-14
问题内容

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

logger.debug("The bonus for employee {} is {}", 
   employee.getName(), employeeService.calculateBonus(employee));

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

Logback
文档未涵盖此详细信息。

因此,我们必须对所有“昂贵”的日志记录使用isDebugEnabled(),对吗?


问题答案:

看这里的例子

从2.4开始,已将方法添加到Logger接口以支持lambda表达式。新方法允许客户端代码懒惰地记录消息,而无需显式检查是否启用了请求的日志级别。例如,以前一个会写:

// pre-Java 8 style optimization: explicitly check the log level
// to make sure the expensiveOperation() method is only called if necessary
 if (logger.isTraceEnabled()) {
     logger.trace("Some long-running operation returned {}", expensiveOperation());
 }

使用Java 8,可以通过lambda表达式实现相同的效果:

// Java-8 style optimization: no need to explicitly check the log level:
// the lambda expression is not evaluated if the TRACE level is not enabled
logger.trace("Some long-running operation returned {}", () -> expensiveOperation());


 类似资料:
  • 我目前正在开发一个应用程序,它将为不同的目的生成两个不同的日志文件。因为我是log4j2新手,所以无法实现它。这是我的配置文件(log4j2.xml): 我不确定我是否用了正确的方法。下面是我的java方法,它试图使用log4j2进行日志记录 谢谢

  • 我正在调查一个问题,在这个问题上,我们看到了与jooq尝试填充生成的记录类相关的奇怪异常,因为它使用java.sql,所以会出现数据类型错误。结果集::getXXX(int)(基于列索引)以获取数据。 我可以共享的堆栈跟踪部分如下所示: 这肯定是使用错误的列索引导致的列不匹配。 出现这个问题是因为我们在不断发展的模式上使用记录,所以底层表包含记录定义中不可用的列。 请注意,触发此操作的实际代码是:

  • 我正在使用回溯与SpringJdbc模板来记录我的SQL查询。我的配置包含下一行: 但是这个日志只使用通配符查询没有参数列表。 在SO上,我找到了一些如何使用log4j实现参数日志记录的答案。但我不想切换到log4j。 那么,我如何接收带有Logback的JdbcTemplate的参数列表呢? 编辑 实际上,如果重要的话,我正在使用。

  • [Java Spring]目前,我正在使用MongoTemplate查询数据 > MongoTemplate-- mongoTemplate。查找(查询,实体) 数据库集合-- 数据库集合。查找() 那么我应该用什么最好的方式呢