mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 10:28:27 +00:00
Adopt to new loggin api
This commit is contained in:
@ -6,6 +6,8 @@
|
||||
|
||||
package docspell.common
|
||||
|
||||
import docspell.logging.Level
|
||||
|
||||
import io.circe.{Decoder, Encoder}
|
||||
|
||||
sealed trait LogLevel { self: Product =>
|
||||
@ -40,6 +42,16 @@ object LogLevel {
|
||||
case _ => Left(s"Invalid log-level: $str")
|
||||
}
|
||||
|
||||
def fromLevel(level: Level): LogLevel =
|
||||
level match {
|
||||
case Level.Fatal => LogLevel.Error
|
||||
case Level.Error => LogLevel.Error
|
||||
case Level.Warn => LogLevel.Warn
|
||||
case Level.Info => LogLevel.Info
|
||||
case Level.Debug => LogLevel.Debug
|
||||
case Level.Trace => LogLevel.Debug
|
||||
}
|
||||
|
||||
def unsafeString(str: String): LogLevel =
|
||||
fromString(str).fold(sys.error, identity)
|
||||
|
||||
|
@ -1,143 +0,0 @@
|
||||
/*
|
||||
* Copyright 2020 Eike K. & Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package docspell.common
|
||||
|
||||
import java.io.{PrintWriter, StringWriter}
|
||||
|
||||
import cats.Applicative
|
||||
import cats.effect.{Ref, Sync}
|
||||
import cats.implicits._
|
||||
import fs2.Stream
|
||||
|
||||
import docspell.common.syntax.all._
|
||||
|
||||
import org.log4s.{Logger => Log4sLogger}
|
||||
|
||||
trait Logger[F[_]] { self =>
|
||||
|
||||
def trace(msg: => String): F[Unit]
|
||||
def debug(msg: => String): F[Unit]
|
||||
def info(msg: => String): F[Unit]
|
||||
def warn(msg: => String): F[Unit]
|
||||
def error(ex: Throwable)(msg: => String): F[Unit]
|
||||
def error(msg: => String): F[Unit]
|
||||
|
||||
final def s: Logger[Stream[F, *]] = new Logger[Stream[F, *]] {
|
||||
def trace(msg: => String): Stream[F, Unit] =
|
||||
Stream.eval(self.trace(msg))
|
||||
|
||||
def debug(msg: => String): Stream[F, Unit] =
|
||||
Stream.eval(self.debug(msg))
|
||||
|
||||
def info(msg: => String): Stream[F, Unit] =
|
||||
Stream.eval(self.info(msg))
|
||||
|
||||
def warn(msg: => String): Stream[F, Unit] =
|
||||
Stream.eval(self.warn(msg))
|
||||
|
||||
def error(msg: => String): Stream[F, Unit] =
|
||||
Stream.eval(self.error(msg))
|
||||
|
||||
def error(ex: Throwable)(msg: => String): Stream[F, Unit] =
|
||||
Stream.eval(self.error(ex)(msg))
|
||||
}
|
||||
def andThen(other: Logger[F])(implicit F: Sync[F]): Logger[F] = {
|
||||
val self = this
|
||||
new Logger[F] {
|
||||
def trace(msg: => String) =
|
||||
self.trace(msg) >> other.trace(msg)
|
||||
|
||||
override def debug(msg: => String) =
|
||||
self.debug(msg) >> other.debug(msg)
|
||||
|
||||
override def info(msg: => String) =
|
||||
self.info(msg) >> other.info(msg)
|
||||
|
||||
override def warn(msg: => String) =
|
||||
self.warn(msg) >> other.warn(msg)
|
||||
|
||||
override def error(ex: Throwable)(msg: => String) =
|
||||
self.error(ex)(msg) >> other.error(ex)(msg)
|
||||
|
||||
override def error(msg: => String) =
|
||||
self.error(msg) >> other.error(msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object Logger {
|
||||
|
||||
def off[F[_]: Applicative]: Logger[F] =
|
||||
new Logger[F] {
|
||||
def trace(msg: => String): F[Unit] =
|
||||
Applicative[F].pure(())
|
||||
|
||||
def debug(msg: => String): F[Unit] =
|
||||
Applicative[F].pure(())
|
||||
|
||||
def info(msg: => String): F[Unit] =
|
||||
Applicative[F].pure(())
|
||||
|
||||
def warn(msg: => String): F[Unit] =
|
||||
Applicative[F].pure(())
|
||||
|
||||
def error(ex: Throwable)(msg: => String): F[Unit] =
|
||||
Applicative[F].pure(())
|
||||
|
||||
def error(msg: => String): F[Unit] =
|
||||
Applicative[F].pure(())
|
||||
}
|
||||
|
||||
def log4s[F[_]: Sync](log: Log4sLogger): Logger[F] =
|
||||
new Logger[F] {
|
||||
def trace(msg: => String): F[Unit] =
|
||||
log.ftrace(msg)
|
||||
|
||||
def debug(msg: => String): F[Unit] =
|
||||
log.fdebug(msg)
|
||||
|
||||
def info(msg: => String): F[Unit] =
|
||||
log.finfo(msg)
|
||||
|
||||
def warn(msg: => String): F[Unit] =
|
||||
log.fwarn(msg)
|
||||
|
||||
def error(ex: Throwable)(msg: => String): F[Unit] =
|
||||
log.ferror(ex)(msg)
|
||||
|
||||
def error(msg: => String): F[Unit] =
|
||||
log.ferror(msg)
|
||||
}
|
||||
|
||||
def buffer[F[_]: Sync](): F[(Ref[F, Vector[String]], Logger[F])] =
|
||||
for {
|
||||
buffer <- Ref.of[F, Vector[String]](Vector.empty[String])
|
||||
logger = new Logger[F] {
|
||||
def trace(msg: => String) =
|
||||
buffer.update(_.appended(s"TRACE $msg"))
|
||||
|
||||
def debug(msg: => String) =
|
||||
buffer.update(_.appended(s"DEBUG $msg"))
|
||||
|
||||
def info(msg: => String) =
|
||||
buffer.update(_.appended(s"INFO $msg"))
|
||||
|
||||
def warn(msg: => String) =
|
||||
buffer.update(_.appended(s"WARN $msg"))
|
||||
|
||||
def error(ex: Throwable)(msg: => String) = {
|
||||
val ps = new StringWriter()
|
||||
ex.printStackTrace(new PrintWriter(ps))
|
||||
buffer.update(_.appended(s"ERROR $msg:\n$ps"))
|
||||
}
|
||||
|
||||
def error(msg: => String) =
|
||||
buffer.update(_.appended(s"ERROR $msg"))
|
||||
}
|
||||
} yield (buffer, logger)
|
||||
|
||||
}
|
@ -17,6 +17,8 @@ import cats.implicits._
|
||||
import fs2.io.file.Path
|
||||
import fs2.{Stream, io, text}
|
||||
|
||||
import docspell.logging.Logger
|
||||
|
||||
object SystemCommand {
|
||||
|
||||
final case class Config(program: String, args: Seq[String], timeout: Duration) {
|
||||
|
@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright 2020 Eike K. & Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package docspell.common.syntax
|
||||
|
||||
import cats.effect.Sync
|
||||
import fs2.Stream
|
||||
|
||||
import org.log4s.Logger
|
||||
|
||||
trait LoggerSyntax {
|
||||
|
||||
implicit final class LoggerOps(logger: Logger) {
|
||||
|
||||
def ftrace[F[_]: Sync](msg: => String): F[Unit] =
|
||||
Sync[F].delay(logger.trace(msg))
|
||||
|
||||
def fdebug[F[_]: Sync](msg: => String): F[Unit] =
|
||||
Sync[F].delay(logger.debug(msg))
|
||||
|
||||
def sdebug[F[_]: Sync](msg: => String): Stream[F, Nothing] =
|
||||
Stream.eval(fdebug(msg)).drain
|
||||
|
||||
def finfo[F[_]: Sync](msg: => String): F[Unit] =
|
||||
Sync[F].delay(logger.info(msg))
|
||||
|
||||
def sinfo[F[_]: Sync](msg: => String): Stream[F, Nothing] =
|
||||
Stream.eval(finfo(msg)).drain
|
||||
|
||||
def fwarn[F[_]: Sync](msg: => String): F[Unit] =
|
||||
Sync[F].delay(logger.warn(msg))
|
||||
|
||||
def ferror[F[_]: Sync](msg: => String): F[Unit] =
|
||||
Sync[F].delay(logger.error(msg))
|
||||
|
||||
def ferror[F[_]: Sync](ex: Throwable)(msg: => String): F[Unit] =
|
||||
Sync[F].delay(logger.error(ex)(msg))
|
||||
}
|
||||
}
|
@ -8,11 +8,6 @@ package docspell.common
|
||||
|
||||
package object syntax {
|
||||
|
||||
object all
|
||||
extends EitherSyntax
|
||||
with StreamSyntax
|
||||
with StringSyntax
|
||||
with LoggerSyntax
|
||||
with FileSyntax
|
||||
object all extends EitherSyntax with StreamSyntax with StringSyntax with FileSyntax
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user