在Scala中,执行一个块并忽略但是记录异常

时间:2016-09-15 13:20:02

标签: scala

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)
    }
  }
}

这是否已在某些公共库中实现?

1 个答案:

答案 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 } } ,如果失败则使用默认值(单位)