membership-attribute-service/app/monitoring/SentryLogging.scala (32 lines of code) (raw):
package monitoring
import ch.qos.logback.classic.spi.ILoggingEvent
import ch.qos.logback.core.filter.Filter
import ch.qos.logback.core.spi.FilterReply
import com.gu.monitoring.{SafeLogger, SafeLogging}
import configuration.SentryConfig
import io.sentry.Sentry
import scala.util.{Failure, Success, Try}
object SentryLogging extends SafeLogging {
def init(config: SentryConfig): Unit = {
config.sentryDsn match {
case None => logger.warnNoPrefix("No Sentry logging configured (OK for dev)")
case Some(sentryDSN) =>
logger.infoNoPrefix(s"Initialising Sentry logging")
Try {
Sentry.init(sentryDSN)
val buildInfo: Map[String, String] = app.BuildInfo.toMap.view.mapValues(_.toString).toMap
val tags = Map("stage" -> config.stage) ++ buildInfo
tags.foreach { case (key, value) =>
Sentry.setTag(key, value)
}
} match {
case Success(_) => logger.debug("Sentry logging configured.")
case Failure(e) => logger.errorNoPrefix(scrub"Something went wrong when setting up Sentry logging ${e.getStackTrace}")
}
}
}
}
class PiiFilter extends Filter[ILoggingEvent] {
override def decide(event: ILoggingEvent): FilterReply = if (event.getMarker.contains(SafeLogger.sanitizedLogMessage)) FilterReply.ACCEPT
else FilterReply.DENY
}