Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 实现基于变量的日志记录?_Java - Fatal编程技术网

Java 实现基于变量的日志记录?

Java 实现基于变量的日志记录?,java,Java,我用三个不同的日志(一个普通日志和两个特定于类的日志)创建了一个很好的UI 每个日志可以打印不同颜色的不同行 我正在考虑这样做,以便显示信息/错误/警告。 现在,问题是,我只希望在设置变量时进行详细的调试(类似于detailedDebug=true) 我想要这样的东西: Simple | Detailed Error thrown in ... | Error thrown.. + dump of all variables related to the error

我用三个不同的日志(一个普通日志和两个特定于类的日志)创建了一个很好的UI

每个日志可以打印不同颜色的不同行

我正在考虑这样做,以便显示信息/错误/警告。 现在,问题是,我只希望在设置变量时进行详细的调试(类似于
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建议的基于供应商的方法。