我正在开发一个Apache模块。在开发过程中,我发现在代码中的各个点使用日志记录功能很方便。 例如,在打开文件后,如果操作不成功,我会记录错误,以便我可以准确地知道代码中出现问题的位置。
现在,我即将把我的模块发给我的老板(我正在实习)。我想了解有关日志记录的最佳做法。它是否有利于维护或是否有害,因为它可能会妨碍服务器的响应时间。
答案 0 :(得分:1)
这实际上取决于您编写这些日志记录指令的方式。如果你写了:
logger.debug(computeSomeCostlyDebugOutput());
如果未在DEBUG级别设置记录器,则可能会严重影响性能(computeSomeCostlyDebugOutput
总是需要时间来执行,如果与DEBUG级别不匹配,则记录器将忽略其结果。)
如果你这样写它:
if (logger.isDebugEnabled()) {
logger.debug(computeSomeCostlyDebugOutput());
}
然后,只有设置了正确的记录器级别(即记录器不会忽略它),才会发生代价高昂的操作和记录。它基本上像记录器的另一个开关,第一个开关是配置的记录器级别。
正如Andrzej Doyle所指出的那样,记录器会在内部检查其级别,但这会在debug
方法中发生,此时已经浪费在computeSomeCostlyDebugOutput
上。如果你在computeSomeCostlyDebugOutput
中浪费时间,当你知道它的结果不会白费时你最好这样做。
许多软件附带了日志记录指令,如果您需要有关事物,执行路径和内容的内部工作的更多详细信息,您可以激活它们。只需确保它们可以被停用,并且只有在设置了适当的级别时才需要计算时间。
答案 1 :(得分:0)
Log4J的设计目标之一(有充分理由)是性能; Ceki Gulku希望这个库可以用于生产,企业软件和Log4J本身的开销实际上非常小(用我自己的webapp项目和一个分析器测量)。
可能需要一些时间的两件事是: