那么,这些额外的调试日志将如何影响性能呢?
它会影响应用程序的性能,因为记录器是磁盘 I/O 调用(假设您正在写入文件系统),并且对于生产环境,强烈建议不要使用 DEBUG
日志级别。
在部署时,是否有任何自动删除 log.debug() 语句的自动方法?
不,没有神奇的方法来删除语句,但是当您将日志记录级别设置为INFO时,只要您在将参数传递给方法时不进行大量计算,就应该没问题。例如,如果将记录器级别设置为 INFO,并假设代码中包含以下两个记录器:log.debug()
debug()
logger.debug(" Entry:: "); //this logger is fine, no calculations
//Below logger, you are doing computations to print i.e., calling to String methods
logger.debug(" Entry : product:"+product+" dept:"+dept);//overhead toString() calls
我建议使用slf4j,以便您可以通过使用{}
(使用它的MessageFormatter替换为实际值)来避免第二个记录器计算开销,如下所示:
//Below logger product and dept toString() NOT invoked
logger.debug(" Entry : product:{} dept{}", product, dept);
更重要的一点是,slf4j只是一个抽象,你可以在任何日志记录框架之间切换,你可以看看下面从这里获取的文本。
Java的简单日志记录外观(SLF4J)作为各种日志记录框架(例如.java.util.log,logback,log4j)的简单外观或抽象,允许最终用户在部署时插入所需的日志记录框架。