Skip to content

Instantly share code, notes, and snippets.

@hohonuuli
Created May 2, 2022 16:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hohonuuli/c03ebec548b71db71fda33f05f75bf8d to your computer and use it in GitHub Desktop.
Save hohonuuli/c03ebec548b71db71fda33f05f75bf8d to your computer and use it in GitHub Desktop.
Gist for Medium article
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