Does log.debug decrease performance

前端 未结 5 1101
既然无缘
既然无缘 2020-12-10 13:44

I want to write some logs at the debug log which will not be available in the production logs which has info log level. So how will this extra debug logs affect the performa

5条回答
  •  轮回少年
    2020-12-10 14:29

    So how will this extra debug logs affect the performance?

    It affects the performance of the application as loggers are disc I/O calls (assuming you are writing to file system) and DEBUG log level is strictly NOT recommended for production environments.

    Is there any automagical way of removing the log.debug() statements while deployment?

    No, there is no magical way of removing the log.debug() statements, BUT when you set the logging level to INFO, then as long as you are NOT doing heavy computations while passing the parameters to the debug() method, it should be fine. For example, if you have logger level set to INFO and assume you have got the below two loggers in your code:

    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
    

    I recommend to use slf4j so that you can avoid the second logger computations overhead by using {} (which replaces with actual values using it's MessageFormatter) as shown below:

    //Below logger product and dept toString() NOT invoked
    logger.debug(" Entry : product:{} dept{}", product, dept);
    

    One more important point is that with slf4j is just an abstraction and you can switch between any logging frameworks, you can look below text taken from 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.

提交回复
热议问题