trait BoxLogging extends AnyRef
Mix this trait in to get some low-cost implicits for logging boxes
easily. The consumer will need to implement a logBoxError
method to log messages with an optional Throwable
, as well as its related
friends for trace, debug, info, and warn levels. This allows abstracting out
where and what the actual logger is.
With this mixed in, boxes will have logFailure
and
logFailure
methods. The first logs all Failure
s as well
as Empty
. The second logs only Failure
s and
ParamFailure
s, treating Empty
as a valid value. These both log their
respective items at ERROR level. You can also use traceLog*
, debugLog*
,
infoLog*
, and warnLog*
if you want to log at other levels (e.g., you can
use infoLogFailure
to log an Empty
or Failure
at INFO
level).
All of these return the box unchanged, so you can continue to use it
in for
comprehensions, call openOr
on it, etc.
There is an implementation for anyone who wants to use Lift's
Loggable
trait called LoggableBoxLogging
. Another implementaiton
is available for use with a plain SLF4J logger, SLF4JBoxLogging
. You can
also implement a version for any other logging adapter. Lastly, you can
simply import BoxLogging._
to get the methods available at a top level;
however, note that using them this way will lose information about where the
log message came from.
Here is an example of how you might use this in system that executes a third- party service and notifies another system of failures.
val systemResult: Box[ServiceReturn] = system .executeService(true, requester) .map(...) .logFailure("Failed to execute service") match { case Full(content) => content case failure: Failure => otherSystem.notifyFailure(failure) case Empty => otherSystem.notifyFailure(Failure("No idea what happened.")) }
- Alphabetic
- By Inheritance
- BoxLogging
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Type Members
- implicit class LogEmptyOrFailure [T] extends AnyRef
Abstract Value Members
-
abstract
def
logBoxDebug(message: String, throwable: Option[Throwable]): Unit
Called with a debug message and possibly a throwable that caused the issue in question.
Called with a debug message and possibly a throwable that caused the issue in question. Should DEBUG log the message and the throwable.
Exists in order to abstract away logger abstractions. Abstractception, as it were.
- Attributes
- protected
-
abstract
def
logBoxError(message: String, throwable: Option[Throwable]): Unit
Called with an error message and possibly a throwable that caused the error in question.
Called with an error message and possibly a throwable that caused the error in question. Should ERROR log the message and the throwable.
Exists in order to abstract away logger abstractions. Abstractception, as it were.
- Attributes
- protected
-
abstract
def
logBoxInfo(message: String, throwable: Option[Throwable]): Unit
Called with an info message and possibly a throwable that caused the issue in question.
Called with an info message and possibly a throwable that caused the issue in question. Should INFO log the message and the throwable.
Exists in order to abstract away logger abstractions. Abstractception, as it were.
- Attributes
- protected
-
abstract
def
logBoxTrace(message: String, throwable: Option[Throwable]): Unit
Called with a trace message and possibly a throwable that caused the issue in question.
Called with a trace message and possibly a throwable that caused the issue in question. Should TRACE log the message and the throwable.
Exists in order to abstract away logger abstractions. Abstractception, as it were.
- Attributes
- protected
-
abstract
def
logBoxWarn(message: String, throwable: Option[Throwable]): Unit
Called with a warn message and possibly a throwable that caused the issue in question.
Called with a warn message and possibly a throwable that caused the issue in question. Should WARN log the message and the throwable.
Exists in order to abstract away logger abstractions. Abstractception, as it were.
- Attributes
- protected
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )