diff --git a/build.sbt b/build.sbt
index 92b2ebe5e..8eec30999 100644
--- a/build.sbt
+++ b/build.sbt
@@ -75,7 +75,8 @@ lazy val commonSettings = Seq(
"com.beachape" %% "enumeratum" % "1.6.1",
"joda-time" % "joda-time" % "2.10.6",
"commons-io" % "commons-io" % "2.6",
- "com.github.scopt" %% "scopt" % "4.0.0-RC2"
+ "com.github.scopt" %% "scopt" % "4.0.0-RC2",
+ "io.sentry" % "sentry-logback" % "1.7.30"
)
)
@@ -88,6 +89,7 @@ lazy val pscryptoSettings = Seq(
lazy val psloginPackSettings = Seq(
packMain := Map("ps-login" -> "net.psforever.pslogin.PsLogin"),
packArchivePrefix := "pslogin",
+ packJvmOpts := Map("ps-login" -> Seq("-Dstacktrace.app.packages=net.psforever")),
packExtraClasspath := Map("ps-login" -> Seq("${PROG_HOME}/pscrypto-lib", "${PROG_HOME}/config")),
packResourceDir += (baseDirectory.value / "pscrypto-lib" -> "pscrypto-lib"),
packResourceDir += (baseDirectory.value / "config" -> "config")
diff --git a/common/src/main/scala/net/psforever/util/Config.scala b/common/src/main/scala/net/psforever/util/Config.scala
index d66007dce..b910f8d0b 100644
--- a/common/src/main/scala/net/psforever/util/Config.scala
+++ b/common/src/main/scala/net/psforever/util/Config.scala
@@ -61,7 +61,8 @@ case class AppConfig(
antiCheat: AntiCheatConfig,
network: NetworkConfig,
developer: DeveloperConfig,
- kamon: KamonConfig
+ kamon: KamonConfig,
+ sentry: SentryConfig
)
case class LoginConfig(
@@ -123,3 +124,8 @@ case class NetSimConfig(
case class KamonConfig(
enable: Boolean
)
+
+case class SentryConfig(
+ enable: Boolean,
+ dsn: String
+)
diff --git a/config/logback.xml b/config/logback.xml
index 4e81de88b..cbf2e458f 100644
--- a/config/logback.xml
+++ b/config/logback.xml
@@ -31,10 +31,17 @@
+
+
+ WARN
+
+
+
-
-
-
+
+
+
+
diff --git a/pslogin/src/main/scala/PsLogin.scala b/pslogin/src/main/scala/PsLogin.scala
index 435004ce6..1b47c9910 100644
--- a/pslogin/src/main/scala/PsLogin.scala
+++ b/pslogin/src/main/scala/PsLogin.scala
@@ -2,7 +2,6 @@ package net.psforever.pslogin
import java.net.InetAddress
import java.util.Locale
-
import akka.{actor => classic}
import akka.actor.typed.scaladsl.adapter._
import akka.routing.RandomPool
@@ -26,6 +25,7 @@ import services.properties.PropertyOverrideManager
import org.flywaydb.core.Flyway
import java.nio.file.Paths
import scopt.OParser
+import io.sentry.Sentry
import net.psforever.actors.session.SessionActor
import net.psforever.login.psadmin.PsAdminActor
@@ -89,6 +89,11 @@ object PsLogin {
Kamon.init()
}
+ if (Config.app.sentry.enable) {
+ logger.info(s"Enabling Sentry")
+ Sentry.init(Config.app.sentry.dsn)
+ }
+
/** Start up the main actor system. This "system" is the home for all actors running on this server */
implicit val system = classic.ActorSystem("PsLogin")
Default(system)