Java 实现基于变量的日志记录?
我用三个不同的日志(一个普通日志和两个特定于类的日志)创建了一个很好的UI 每个日志可以打印不同颜色的不同行 我正在考虑这样做,以便显示信息/错误/警告。 现在,问题是,我只希望在设置变量时进行详细的调试(类似于Java 实现基于变量的日志记录?,java,Java,我用三个不同的日志(一个普通日志和两个特定于类的日志)创建了一个很好的UI 每个日志可以打印不同颜色的不同行 我正在考虑这样做,以便显示信息/错误/警告。 现在,问题是,我只希望在设置变量时进行详细的调试(类似于detailedDebug=true) 我想要这样的东西: Simple | Detailed Error thrown in ... | Error thrown.. + dump of all variables related to the error
detailedDebug=true
)
我想要这样的东西:
Simple | Detailed
Error thrown in ... | Error thrown.. + dump of all variables related to the error
现在,使用if语句我可以很容易地实现这一点,但是,这似乎过于复杂(由于调试原因,代码也变得复杂)
我如何实现这一点(同时使其易于使用,最重要的是保持清洁)
我应该在每个类中创建一个方法,使用自动检查变量的日志功能,然后执行所要求的操作吗 您应该使用日志级别作为变量来控制细节。当您需要更多细节时,请将级别调低到“最佳” 然而,您希望记录的某些操作可能需要大量资源来计算细节(例如,您可以从数据库中检索信息等)。在这种情况下,应该使用if语句,因为即使日志级别为ERROR级别,也会消耗资源 例如: 将始终执行以下代码:
logger.log(Level.FINEST, "Some detailed log info which sows the results from DB {0}",
new Object[]{ getResults() });
如果只希望在显示FIEST时执行此代码,则需要将该语句包装在If语句中:
if (logger.isLoggable(Level.FINEST)) {
// Some intensive logging
}
使用静态日志记录方法,SLF4J等…因此,如果我理解正确,我需要调用日志方法两次(在我的例子中),一次调用“简单”版本w/Level.FINE,一次调用复杂版本w/Level.FINEST?如果这样做,它将在Level==FINE时记录一次,在Level==FINE时记录两次。如果只想记录一次,就需要使用if语句。Hmmm可以处理它。当POC工作时,我将选择您的答案。谢谢你,伙计!在Java8中,log方法接受供应商,这消除了一些条件化的需要。例如,只需执行
log.fine(()->“值为:+”expensiveComputation())代码>。很少有人需要使用isLoggable
。参数化日志的存在正是为了消除这种需要。正确的方法是只调用一次getResults()
,而不是第二次进行日志记录,然后将变量传递给logger.log
,因此只有在启用了FINEST的情况下才会调用其toString方法。或者,使用Joshua建议的基于供应商的方法。