log4cats
log4cats copied to clipboard
Proposal for `log4cats-sourcecode` module to provide information about the call site
I suggest adding a module for integration with sourcecode to add information about the call site to the context of a structured logger. Rather than introduce a new subtype of Logger
, I think the simplest thing is to put the logging methods on an object. It might look something like this:
object SourceCodeLogger {
def info[F[_]](ctx: Map[String, String])(msg: => String)(implicit logger: StructuredLogger, line: sourcecode.Line, file: sourcecode.File): F[Unit] =
logger.info(ctx ++ Map("callsite" -> s"${file.value}:${line.value}"))(msg)
/* ... */
}
Of course there's endless scope for bike shedding about exactly what information should be provided and in what format, so I don't know if this is over-opinionated to go in a library like log4cats?
I think it could, although I'm not 100% on sourcecode as I havne't used it. I normally use
https://github.com/tpolecat/SourcePos
for this sort of thing, but can be convinced for sure.
sourcepos looks good! I like that it only needs a single parameter and has its own opinionated toString.
Scribe uses sourcecode
since 3.x and it works beautifully with scribe-cats
.