log4cats icon indicating copy to clipboard operation
log4cats copied to clipboard

Proposal for `log4cats-sourcecode` module to provide information about the call site

Open bplommer opened this issue 3 years ago • 3 comments

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?

bplommer avatar Nov 18 '21 14:11 bplommer

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.

ChristopherDavenport avatar Nov 18 '21 15:11 ChristopherDavenport

sourcepos looks good! I like that it only needs a single parameter and has its own opinionated toString.

bplommer avatar Nov 18 '21 15:11 bplommer

Scribe uses sourcecode since 3.x and it works beautifully with scribe-cats.

darkfrog26 avatar Feb 06 '22 16:02 darkfrog26