我想在调试日志中写入一些日志,这些日志在具有信息日志级别的生产日志中不可用。那么这些额外的调试日志将如何影响性能呢?我的意思是,如果我们将日志级别设置为 INFO,记录器必须检查日志级别是什么,并发现需要忽略 log.debug。
那么这种额外的日志级别检查会影响性能吗?
部署时是否有任何自动删除 log.debug() 语句的方法?我的意思是在开发期间,log.debug 将在那里,我们可以调试。但是在生产部署期间,自动机制将删除所有 log.debug() 消息。我不确定这些是否可行。
最佳答案
So how will this extra debug logs affect the performance?
它会影响应用程序的性能,因为记录器是磁盘 I/O 调用(假设您正在写入文件系统)并且 DEBUG
严格不建议在生产环境中使用日志级别。
Is there any automagical way of removing the log.debug() statements while deployment?
不,没有神奇的方法可以删除 log.debug()
语句,但是当您将日志记录级别设置为 INFO 时,只要您在将参数传递给 debug()
时不进行大量计算即可。方法,应该没问题。例如,如果您将记录器级别设置为 INFO 并假设您的代码中有以下两个记录器:
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 只是一个抽象,您可以在任何日志框架之间切换,您可以查看以下摘自 here 的文本.
The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.
关于java - log.debug 会降低性能吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284499/