Last active
February 3, 2022 20:30
-
-
Save hohonuuli/1eb9c063a43fdf75e847422e42cf2749 to your computer and use it in GitHub Desktop.
Simple pass through logger
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.lang.System.Logger | |
import java.lang.System.Logger.Level | |
object Logging: | |
private def logAndReturn[T](obj: T, logger: Logger, level: Level, fn: T => String): T = | |
if logger.isLoggable(level) then | |
logger.log(level, fn(obj)) | |
obj | |
/** | |
* A pass-through logger that logs to the system logger. It adds an | |
* extension to any object to log messages at the specified level AND | |
* returns the object itself. This allows us to avoid this common pattern: | |
* {{{ | |
* var log = System.getLogger("my.logger") | |
* var a = generateSomeReturnValue() | |
* log.log(Level.INFO, "some message") | |
* return a | |
* }}} | |
* | |
* Instead we can write: | |
* {{{ | |
* import Logging.{given} | |
* given log: Logger = System.getLogger("my.logger") | |
* return generateSomeReturnValue().logInfo(some message") | |
* }}} | |
*/ | |
extension [T](obj: T)(using logger: Logger) | |
def logTrace(fn: T => String): T = logAndReturn(obj, logger, Level.TRACE, fn) | |
def logDebug(fn: T => String): T = logAndReturn(obj, logger, Level.DEBUG, fn) | |
def logInfo(fn: T => String): T = logAndReturn(obj, logger, Level.INFO, fn) | |
def logWarn(fn: T => String): T = logAndReturn(obj, logger, Level.WARNING, fn) | |
def logError(fn: T => String): T = logAndReturn(obj, logger, Level.ERROR, fn) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment