java - log.debug 会降低性能吗

标签 java log4j

我想在调试日志中写入一些日志,这些日志在具有信息日志级别的生产日志中不可用。那么这些额外的调试日志将如何影响性能呢?我的意思是,如果我们将日志级别设置为 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/

相关文章:

java - addCookie 方法不会将 cookie 添加到 httpServletResponse

java - 无法在单独的类中添加到根?

java - 出现 Null Pointed 异常错误但运行正常? Java JComboBox(下拉框)

java - 如何获取gmail帐户的个人资料图片

java - 如何将特定类的日志信息记录到特定文件中?

java - 如何在 HTML 中嵌入主类不在 JAR 主目录中的 Java 应用程序?

java - slf4j没用吗?

log4j - 是否有 log4j.properties 选项的全面描述?

java - 如何使用log4j在java中的syslog服务器中写入单独的日志文件

java - Java 独立应用程序中的 Log4j 记录器。 jar 文件中的属性路径