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

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

The newest version!
/*
 * Copyright (c) 2014-2019 by The Monix Project Developers.
 * 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)
    }

  /**
    * Default instance that logs errors in a platform specific way.
    *
    * For the JVM logging is accomplished using the current
    * [[https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html Thread.UncaughtExceptionHandler]].
    * If an `UncaughtExceptionHandler` is not currently set,
    * then error is printed on stderr.
    *
    * For JS logging is done via `console.error`.
    */
  val default: UncaughtExceptionReporter =
    internal.DefaultUncaughtExceptionReporter

  /**
    * DEPRECATED - use [[default]] instead.
    */
  @deprecated("Use UncaughtExceptionReporter.default", since = "3.0.0")
  val LogExceptionsToStandardErr = {
    // $COVERAGE-OFF$
    UncaughtExceptionReporter(ExecutionContext.defaultReporter)
    // $COVERAGE-ON$
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy