All Downloads are FREE. Search and download functionalities are using the official Maven repository.

slog4s.console.internal.LoggingRuntimeImpl.scala Maven / Gradle / Ivy

The newest version!
package slog4s.console.internal

import cats.effect.concurrent.Semaphore
import cats.effect.{Clock, Concurrent, Sync}
import cats.syntax.functor._
import slog4s.console.ConsoleConfig
import slog4s.shared.{AsContext, LoggingRuntime}
import slog4s.{Logger, LoggerFactory, LoggingContext, StructureBuilder}

private[console] class LoggingRuntimeImpl[F[
    _
]: Sync: Clock, T: StructureBuilder](
    consoleConfig: ConsoleConfig[F],
    semaphore: Semaphore[F],
    underlying: Formatter[F, T],
    context: LoggingContext[F]
)(implicit asContext: AsContext[F, Map[String, T]])
    extends LoggingRuntime[F] {
  override val loggerFactory: LoggerFactory[F] = new LoggerFactory[F] {
    private[this] val formatter =
      new SyncFormatter(semaphore, underlying)
    override def make(name: String): Logger[F] =
      new ConsoleLogger[F, T](
        name,
        consoleConfig,
        formatter
      )
  }
  override implicit val loggingContext: LoggingContext[F] = context
}

private[console] object LoggingRuntimeImpl {
  def make[F[_]: Concurrent: Clock, T: StructureBuilder](
      consoleConfig: ConsoleConfig[F],
      underlying: Formatter[F, T],
      context: LoggingContext[F]
  )(implicit
      asContext: AsContext[F, Map[String, T]]
  ): F[LoggingRuntimeImpl[F, T]] = {
    Semaphore[F](1).map { semaphore =>
      new LoggingRuntimeImpl(consoleConfig, semaphore, underlying, context)
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy