From 0bacbb2d988a182410980f2cd9980351ab372efd Mon Sep 17 00:00:00 2001 From: Nikita Viliunov Date: Mon, 25 Nov 2024 11:18:08 +0100 Subject: [PATCH] Add mapLog, prefixed and withField to LogOf --- .../scala/com/evolutiongaming/catshelper/Log.scala | 2 ++ .../com/evolutiongaming/catshelper/LogOf.scala | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/src/main/scala/com/evolutiongaming/catshelper/Log.scala b/core/src/main/scala/com/evolutiongaming/catshelper/Log.scala index 0a354445..19d4477a 100644 --- a/core/src/main/scala/com/evolutiongaming/catshelper/Log.scala +++ b/core/src/main/scala/com/evolutiongaming/catshelper/Log.scala @@ -290,6 +290,8 @@ object Log { def prefixed(prefix: String): Log[F] = mapMsg(msg => s"$prefix $msg") + def withField(key: String, value: String): Log[F] = prefixed(s"$key=$value") + def mapMdc(f: Log.Mdc => Log.Mdc): Log[F] = new Log[F] { def trace(msg: => String, mdc: Mdc): F[Unit] = self.trace(msg, f(mdc)) diff --git a/core/src/main/scala/com/evolutiongaming/catshelper/LogOf.scala b/core/src/main/scala/com/evolutiongaming/catshelper/LogOf.scala index 43b7141d..e3b91d7c 100644 --- a/core/src/main/scala/com/evolutiongaming/catshelper/LogOf.scala +++ b/core/src/main/scala/com/evolutiongaming/catshelper/LogOf.scala @@ -92,5 +92,16 @@ object LogOf { } def forClass[C](implicit C: ClassTag[C]): F[Log[F]] = self.apply(C.runtimeClass) + + def mapLog(f: Log[F] => Log[F])(implicit F: Monad[F]): LogOf[F] = new MapLog(self, f) + + def prefixed(prefix: String)(implicit F: Monad[F]): LogOf[F] = mapLog(_.prefixed(prefix)) + + def withField(key: String, value: String)(implicit F: Monad[F]): LogOf[F] = mapLog(_.withField(key, value)) } -} \ No newline at end of file + + private class MapLog[F[_]: Monad](logOf: LogOf[F], mapper: Log[F] => Log[F]) extends LogOf[F] { + override def apply(source: String): F[Log[F]] = logOf.apply(source).map(mapper) + override def apply(source: Class[?]): F[Log[F]] = logOf.apply(source).map(mapper) + } +}