aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/common/logging
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/common/logging')
-rw-r--r--src/main/scala/xyz/driver/common/logging/DefaultPhiLogger.scala17
-rw-r--r--src/main/scala/xyz/driver/common/logging/Implicits.scala62
-rw-r--r--src/main/scala/xyz/driver/common/logging/PhiLogger.scala15
-rw-r--r--src/main/scala/xyz/driver/common/logging/PhiLogging.scala20
-rw-r--r--src/main/scala/xyz/driver/common/logging/PhiString.scala6
-rw-r--r--src/main/scala/xyz/driver/common/logging/PhiStringContext.scala8
-rw-r--r--src/main/scala/xyz/driver/common/logging/Unsafe.scala6
-rw-r--r--src/main/scala/xyz/driver/common/logging/package.scala3
8 files changed, 137 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/common/logging/DefaultPhiLogger.scala b/src/main/scala/xyz/driver/common/logging/DefaultPhiLogger.scala
new file mode 100644
index 0000000..ca25c44
--- /dev/null
+++ b/src/main/scala/xyz/driver/common/logging/DefaultPhiLogger.scala
@@ -0,0 +1,17 @@
+package xyz.driver.common.logging
+
+import org.slf4j.{Logger => Underlying}
+
+class DefaultPhiLogger private[logging](underlying: Underlying) extends PhiLogger {
+
+ def error(message: PhiString): Unit = underlying.error(message.text)
+
+ def warn(message: PhiString): Unit = underlying.warn(message.text)
+
+ def info(message: PhiString): Unit = underlying.info(message.text)
+
+ def debug(message: PhiString): Unit = underlying.debug(message.text)
+
+ def trace(message: PhiString): Unit = underlying.trace(message.text)
+
+}
diff --git a/src/main/scala/xyz/driver/common/logging/Implicits.scala b/src/main/scala/xyz/driver/common/logging/Implicits.scala
new file mode 100644
index 0000000..e486cc1
--- /dev/null
+++ b/src/main/scala/xyz/driver/common/logging/Implicits.scala
@@ -0,0 +1,62 @@
+package xyz.driver.common.logging
+
+import java.io.File
+import java.net.{URI, URL}
+import java.nio.file.Path
+import java.time.LocalDateTime
+import java.util.UUID
+
+import scala.concurrent.duration.Duration
+
+trait Implicits {
+
+ // DO NOT ADD!
+ // phi"$fullName" is easier to write, than phi"${Unsafe(fullName)}"
+ // If you wrote the second version, it means that you know, what you doing.
+ // implicit def toPhiString(s: String): PhiString = Unsafe(s)
+
+ implicit def toPhiStringContext(sc: StringContext): PhiStringContext = new PhiStringContext(sc)
+
+ implicit def booleanToPhiString(x: Boolean): PhiString = Unsafe(x.toString)
+
+ implicit def uriToPhiString(x: URI): PhiString = Unsafe(x.toString)
+
+ implicit def urlToPhiString(x: URL): PhiString = Unsafe(x.toString)
+
+ implicit def pathToPhiString(x: Path): PhiString = Unsafe(x.toString)
+
+ implicit def fileToPhiString(x: File): PhiString = Unsafe(x.toString)
+
+ implicit def localDateTimeToPhiString(x: LocalDateTime): PhiString = Unsafe(x.toString)
+
+ implicit def durationToPhiString(x: Duration): PhiString = Unsafe(x.toString)
+
+ implicit def uuidToPhiString(x: UUID): PhiString = Unsafe(x.toString)
+
+ implicit def tuple2ToPhiString[T1, T2](x: (T1, T2))
+ (implicit inner1: T1 => PhiString,
+ inner2: T2 => PhiString): PhiString = x match {
+ case (a, b) => phi"($a, $b)"
+ }
+
+ implicit def tuple3ToPhiString[T1, T2, T3](x: (T1, T2, T3))
+ (implicit inner1: T1 => PhiString,
+ inner2: T2 => PhiString,
+ inner3: T3 => PhiString): PhiString = x match {
+ case (a, b, c) => phi"($a, $b, $c)"
+ }
+
+ implicit def optionToPhiString[T](opt: Option[T])(implicit inner: T => PhiString): PhiString = opt match {
+ case None => phi"None"
+ case Some(x) => phi"Some($x)"
+ }
+
+ implicit def iterableToPhiString[T](xs: Iterable[T])(implicit inner: T => PhiString): PhiString = {
+ Unsafe(xs.map(inner(_).text).mkString("Col(", ", ", ")"))
+ }
+
+ implicit def throwableToPhiString(x: Throwable): PhiString = {
+ Unsafe(Option(x.getMessage).getOrElse(x.getClass.getName))
+ }
+
+}
diff --git a/src/main/scala/xyz/driver/common/logging/PhiLogger.scala b/src/main/scala/xyz/driver/common/logging/PhiLogger.scala
new file mode 100644
index 0000000..c8907a8
--- /dev/null
+++ b/src/main/scala/xyz/driver/common/logging/PhiLogger.scala
@@ -0,0 +1,15 @@
+package xyz.driver.common.logging
+
+trait PhiLogger {
+
+ def error(message: PhiString): Unit
+
+ def warn(message: PhiString): Unit
+
+ def info(message: PhiString): Unit
+
+ def debug(message: PhiString): Unit
+
+ def trace(message: PhiString): Unit
+
+}
diff --git a/src/main/scala/xyz/driver/common/logging/PhiLogging.scala b/src/main/scala/xyz/driver/common/logging/PhiLogging.scala
new file mode 100644
index 0000000..b8cdcf0
--- /dev/null
+++ b/src/main/scala/xyz/driver/common/logging/PhiLogging.scala
@@ -0,0 +1,20 @@
+package xyz.driver.common.logging
+
+import org.slf4j.LoggerFactory
+
+trait PhiLogging extends Implicits {
+
+ protected val logger: PhiLogger = new DefaultPhiLogger(LoggerFactory.getLogger(getClass.getName))
+
+ /**
+ * Logs the failMessage on an error level, if isSuccessful is false.
+ * @return isSuccessful
+ */
+ protected def loggedError(isSuccessful: Boolean, failMessage: PhiString): Boolean = {
+ if (!isSuccessful) {
+ logger.error(failMessage)
+ }
+ isSuccessful
+ }
+
+}
diff --git a/src/main/scala/xyz/driver/common/logging/PhiString.scala b/src/main/scala/xyz/driver/common/logging/PhiString.scala
new file mode 100644
index 0000000..ce1b90c
--- /dev/null
+++ b/src/main/scala/xyz/driver/common/logging/PhiString.scala
@@ -0,0 +1,6 @@
+package xyz.driver.common.logging
+
+class PhiString(private[logging] val text: String) {
+ // scalastyle:off
+ @inline def +(that: PhiString) = new PhiString(this.text + that.text)
+}
diff --git a/src/main/scala/xyz/driver/common/logging/PhiStringContext.scala b/src/main/scala/xyz/driver/common/logging/PhiStringContext.scala
new file mode 100644
index 0000000..8b3c9d0
--- /dev/null
+++ b/src/main/scala/xyz/driver/common/logging/PhiStringContext.scala
@@ -0,0 +1,8 @@
+package xyz.driver.common.logging
+
+final class PhiStringContext(val sc: StringContext) extends AnyVal {
+ def phi(args: PhiString*): PhiString = {
+ val phiArgs = args.map(_.text)
+ new PhiString(sc.s(phiArgs: _*))
+ }
+}
diff --git a/src/main/scala/xyz/driver/common/logging/Unsafe.scala b/src/main/scala/xyz/driver/common/logging/Unsafe.scala
new file mode 100644
index 0000000..c605c85
--- /dev/null
+++ b/src/main/scala/xyz/driver/common/logging/Unsafe.scala
@@ -0,0 +1,6 @@
+package xyz.driver.common.logging
+
+/**
+ * Use it with care!
+ */
+case class Unsafe[T](private[logging] val value: T) extends PhiString(Option(value).map(_.toString).getOrElse("<null>"))
diff --git a/src/main/scala/xyz/driver/common/logging/package.scala b/src/main/scala/xyz/driver/common/logging/package.scala
new file mode 100644
index 0000000..479f59e
--- /dev/null
+++ b/src/main/scala/xyz/driver/common/logging/package.scala
@@ -0,0 +1,3 @@
+package xyz.driver.common
+
+package object logging extends Implicits