Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java log4j v2格式化功能_Java_String_Memory_Logging_Log4j2 - Fatal编程技术网

Java log4j v2格式化功能

Java log4j v2格式化功能,java,string,memory,logging,log4j2,Java,String,Memory,Logging,Log4j2,就伐木工人而言,据说每个伐木工人都有参数构造的隐藏成本 例如:- 这会产生构造消息参数的成本,即将整数i和条目[i]转换为字符串,并连接中间字符串,而不管消息是否将被记录。参数构造的成本可能相当高,这取决于所涉及参数的大小 在Log4j站点上,避免参数构造成本的最佳方法是使用Log4j 2的格式化功能。例如,不写上面的内容: logger.debug("Entry number: {} is {}", i, entry[i]); 在这个格式化功能中发生的事情,这次所花费的成本将会更少。它不是像

就伐木工人而言,据说每个伐木工人都有参数构造的隐藏成本

例如:-

这会产生构造消息参数的成本,即将整数i和条目[i]转换为字符串,并连接中间字符串,而不管消息是否将被记录。参数构造的成本可能相当高,这取决于所涉及参数的大小

在Log4j站点上,避免参数构造成本的最佳方法是使用Log4j 2的格式化功能。例如,不写上面的内容:

logger.debug("Entry number: {} is {}", i, entry[i]);

在这个格式化功能中发生的事情,这次所花费的成本将会更少。它不是像在以前的案例中那样创建字符串吗。请有人解释一下吗?

在第一个示例中,它正在创建字符串,即使不需要。然而,如果需要,这可能是最有效的方法。顺便说一句,
字符串.valueOf
是冗余的

如果关闭消息,则第二个选项会更快。这样可以避免创建一个后来被丢弃的字符串,因为它可以在生成该字符串之前检查是否启用了调试。注意:如果您确实需要该字符串,它可能会比较慢,因为它必须解析消息格式

这两个世界都是最好的,但用词最多的是

if(logger.isDebugEnabled())
    logger.debug("Entry number: " + i + " is " + entry[i]);
在这种情况下,您将执行检查,如果要记录,则将以最快的速度生成消息



有一些日志框架可以避免创建任何字符串,并且速度足够快,您不需要首先关闭调试,但这些框架使用起来并不简单,除非您需要更高的性能,否则我会避免使用它们。

我的第一个问题是关于第二个选项中使用的已更改方法,其中我们在logger.debug中传递3个参数。此方法将如何处理这些参数。log4jv2的格式化功能有什么新功能第二,您的意思是说在第二种情况下,在创建参数之前,记录器将检查是否启用调试模式。
if(logger.isDebugEnabled())
    logger.debug("Entry number: " + i + " is " + entry[i]);