Created
May 2, 2022 16:33
-
-
Save hohonuuli/c03ebec548b71db71fda33f05f75bf8d to your computer and use it in GitHub Desktop.
Gist for Medium article
This file contains 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 | |
import java.util.function.Supplier | |
/** | |
* * @author Brian Schlining | |
*/ | |
object Logging: | |
case class LoggerBuilder( | |
logger: Logger, | |
level: Level = Level.OFF, | |
throwable: Option[Throwable] = None | |
): | |
def atTrace: LoggerBuilder = copy(level = Level.TRACE) | |
def atDebug: LoggerBuilder = copy(level = Level.DEBUG) | |
def atInfo: LoggerBuilder = copy(level = Level.INFO) | |
def atWarn: LoggerBuilder = copy(level = Level.WARNING) | |
def atError: LoggerBuilder = copy(level = Level.ERROR) | |
def withCause(cause: Throwable): LoggerBuilder = copy(throwable = Some(cause)) | |
def log(msg: String): Unit = | |
if (logger.isLoggable(level)) | |
throwable match | |
case Some(e) => logger.log(level, msg, e) | |
case None => logger.log(level, msg) | |
def log(fn: Supplier[String]): Unit = | |
if (logger.isLoggable(level)) | |
throwable match | |
case Some(e) => logger.log(level, fn, e) | |
case None => logger.log(level, fn) | |
given Conversion[Logger, LoggerBuilder] with | |
def apply(logger: Logger): LoggerBuilder = LoggerBuilder(logger) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment