-- --------------------------------------------------------------- [ Level.idr ] -- Module : Level.idr -- Copyright : (c) The Idris Community -- License : see LICENSE -- --------------------------------------------------------------------- [ EOH ] ||| A dependently typed logging level representation where logging ||| levels are based on a Natural number range [0,70]. ||| ||| The `LogLevel` type allows for semantic constructors to be used ||| for the majority of logging levels, with an option for custom ||| levels to be defined. ||| ||| The logging level design comes from the Log4j/Python family of ||| loggers. module Effect.Logging.Level %access public export %default total -- ---------------------------------------------------- [ Log Level Definition ] ||| Logging levels are natural numbers wrapped in a data type for ||| convenience. ||| ||| Several aliases have been defined to aide in semantic use of the ||| logging levels. These aliases have come from the Log4j/Python ||| family of loggers. data LogLevel : Nat -> Type where ||| Log No Events OFF : LogLevel 0 ||| A fine-grained debug message, typically capturing the flow through ||| the application. TRACE : LogLevel 10 ||| A general debugging event. DEBUG : LogLevel 20 ||| An event for informational purposes. INFO : LogLevel 30 ||| An event that might possible lead to an error. WARN : LogLevel 40 ||| An error in the application, possibly recoverable. ERROR : LogLevel 50 ||| A severe error that will prevent the application from continuing. FATAL : LogLevel 60 ||| All events should be logged. ALL : LogLevel 70 ||| User defined logging level. CUSTOM : (n : Nat) -> {auto prf : LTE n 70} -> LogLevel n implementation Cast (LogLevel n) Nat where cast {n} _ = n implementation Show (LogLevel n) where showPrec d OFF = "OFF" showPrec d TRACE = "TRACE" showPrec d DEBUG = "DEBUG" showPrec d INFO = "INFO" showPrec d WARN = "WARN" showPrec d FATAL = "FATAL" showPrec d ERROR = "ERROR" showPrec d ALL = "ALL" showPrec d (CUSTOM n) = showCon d "CUSTOM" $ showArg n implementation Eq (LogLevel n) where (==) x y = lvlEq x y where lvlEq : LogLevel a -> LogLevel b -> Bool lvlEq {a} {b} _ _ = a == b ||| Compare to logging levels. cmpLevel : LogLevel a -> LogLevel b -> Ordering cmpLevel {a} {b} _ _ = compare a b -- --------------------------------------------------------------------- [ EOF ]