All Downloads are FREE. Search and download functionalities are using the official Maven repository.

monix.execution.UncaughtExceptionReporter.scala Maven / Gradle / Ivy

/*
 * Copyright (c) 2014-2016 by its authors. Some rights reserved.
 * See the project homepage at: https://monix.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package monix.execution

import scala.annotation.implicitNotFound
import scala.concurrent.ExecutionContext

/** An exception reporter is a function that logs an uncaught error.
  *
  * Usually taken as an implicit when executing computations that could fail,
  * but that must not blow up the call-stack, like asynchronous tasks.
  *
  * A default implicit is provided that simply logs the error on STDERR.
  */
@implicitNotFound(
  "No ExceptionReporter was found in context for " +
  "reporting uncaught errors, either build one yourself or use " +
  "an implicit Scheduler (schedulers are ExceptionReporters)")
trait UncaughtExceptionReporter extends Serializable {
  def reportFailure(ex: Throwable): Unit
}

/** See [[UncaughtExceptionReporter]]. */
object UncaughtExceptionReporter {
  /** Builds a reporter out of the provided callback. */
  def apply(reporter: Throwable => Unit): UncaughtExceptionReporter =
    new UncaughtExceptionReporter {
      def reportFailure(ex: Throwable) = reporter(ex)
    }

  /** The default reporter. Simply prints stack traces on STDERR. */
  val LogExceptionsToStandardErr = {
    UncaughtExceptionReporter(ex => ExecutionContext.defaultReporter(ex))
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy