Apache有IOUtils.closeQuietly(Closeable)
。在Scala中,我想概括一下:执行块和异常异常,同时记录它们。像这样:
import LogUtils._
object Playground extends App {
implicit val logger_ = LoggerFactory.getLogger(getClass)
silentLog {
println("block")
throw new Exception("an exception")
}
println("end")
}
import org.slf4j.{Logger, LoggerFactory}
import scala.util.control.NonFatal
object LogUtils {
def silentLog[U](f: => U)(implicit log: Logger) {
try f
catch {
case NonFatal(e) => log.error(null, e)
}
}
}
这是否已在某些公共库中实现?
答案 0 :(得分:0)
Try[T]
在某种程度上执行此操作,但不记录异常。 <{1}}在
Try
try .. catch ...
如果您希望在成功时获得价值,请使用def LoggingTry[T](f: => T)(implicit logger: Logger): Try[T] = Try(f()).recoverWith {
case th =>
logger.log(th)
Try { throw th }
}
,如果失败则使用默认值(单位)