【发布时间】:2011-05-31 23:23:18
【问题描述】:
我为 Java 类添加日志记录。特别是 logger.debug 级别(用于开发模式)。
至于在公共方法中调用的私有方法,在私有方法中提供日志记录是否有意义?
是否有效?
谢谢。
【问题讨论】:
标签: java debugging logging methods private
我为 Java 类添加日志记录。特别是 logger.debug 级别(用于开发模式)。
至于在公共方法中调用的私有方法,在私有方法中提供日志记录是否有意义?
是否有效?
谢谢。
【问题讨论】:
标签: java debugging logging methods private
是的,如果你想在维护模式或开发中“调试”你的私有方法,为什么不呢? 在生产中,您将设置日志级别,警告或错误!这取决于你...
【讨论】:
这不一定是效率问题。您必须问自己:“该私有方法是否有值得记录的事情?”
为了避免性能问题,您始终可以在实际记录这些消息之前检查记录器是否记录调试消息。在 log4j 中,你会写
if (logger.isDebugEnabled()) {
logger.debug("complicated" + "innefficient" + "string concatenation");
}
我想,其他记录器也提供类似的概念
【讨论】:
if (logger.isDebugEnabled()) {...} 的需要,因此减少了样板代码。
logger.debug(...) 方法调用。如果有问题的“私有方法”被调用了 100 万次,那么在实际进行日志记录之前,首先检查是否启用了调试级别可能很重要
当然。私有方法通常隐藏实现细节,而这正是大多数 bug 潜伏的地方。将您的日志记录语句放在您认为需要的地方,并在生产环境中禁用它们。
【讨论】:
logger.debug(...) 时,slf4j 将在后台检查是否启用了调试。
当您不需要时,记录可能看起来很浪费,但当您需要时,它是必不可少的。始终在您的类和函数中提供有意义的日志消息。日志级别可以让您过滤掉噪音,并在需要时增加详细程度。好的记录器提供了在运行时更改日志级别的功能。
不过,如果您出于某种原因担心性能,您可以使用一些简单的防护措施来减少日志记录的开销,尤其是调试日志记录,这很少启用。以 log4j/slf4j 为例,您可以将日志调试语句包装在:
if(logger.isDebugEnabled()) {
logger.debug("something");
}
slf4j 还具有类似 printf 的语法,仅在日志级别正确时才进行字符串格式化。
logger.debug("Object {} is not valid!", obj);
就像 darioo 评论的那样,第二种形式消除了在日志语句之前检查日志级别的需要。
【讨论】: