graflog 2.0.0 → 3.0.0
raw patch · 2 files changed
+61/−11 lines, 2 filesdep +containersPVP ok
version bump matches the API change (PVP)
Dependencies added: containers
API changes (from Hackage documentation)
- Graflog.Logger: Protected :: a -> Protected a
- Graflog.Logger: [unProtect] :: Protected a -> a
- Graflog.Logger: instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Graflog.Logger.Protected a)
- Graflog.Logger: instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Graflog.Logger.Protected a)
- Graflog.Logger: instance GHC.Base.Functor Graflog.Logger.Protected
- Graflog.Logger: instance GHC.Classes.Eq a => GHC.Classes.Eq (Graflog.Logger.Protected a)
- Graflog.Logger: instance GHC.Show.Show a => GHC.Show.Show (Graflog.Logger.Protected a)
- Graflog.Logger: newtype Protected a
+ Graflog.Logger: Dictionary :: (Map Text Log) -> Log
+ Graflog.Logger: List :: [Log] -> Log
+ Graflog.Logger: Message :: Text -> Log
+ Graflog.Logger: Redacted :: Log
+ Graflog.Logger: class ToLog a
+ Graflog.Logger: data Log
+ Graflog.Logger: dictionary :: [(Text, Log)] -> Log
+ Graflog.Logger: instance Data.Aeson.Types.ToJSON.ToJSON Graflog.Logger.Log
+ Graflog.Logger: instance Data.String.IsString Graflog.Logger.Log
+ Graflog.Logger: instance GHC.Classes.Eq Graflog.Logger.Log
+ Graflog.Logger: instance GHC.Show.Show Graflog.Logger.Log
+ Graflog.Logger: instance Graflog.Logger.ToLog Data.Text.Internal.Text
+ Graflog.Logger: instance Graflog.Logger.ToLog GHC.Integer.Type.Integer
+ Graflog.Logger: instance Graflog.Logger.ToLog GHC.Types.Double
+ Graflog.Logger: instance Graflog.Logger.ToLog GHC.Types.Float
+ Graflog.Logger: instance Graflog.Logger.ToLog GHC.Types.Int
+ Graflog.Logger: instance Graflog.Logger.ToLog Graflog.Logger.Log
+ Graflog.Logger: instance Graflog.Logger.ToLog a => Graflog.Logger.ToLog (Data.Map.Base.Map Data.Text.Internal.Text a)
+ Graflog.Logger: instance Graflog.Logger.ToLog a => Graflog.Logger.ToLog [a]
+ Graflog.Logger: numToLog :: (Show a, Num a) => a -> Log
+ Graflog.Logger: pair :: ToLog a => Text -> a -> (Text, Log)
+ Graflog.Logger: toLog :: ToLog a => a -> Log
Files
- graflog.cabal +3/−1
- src/Graflog/Logger.hs +58/−10
graflog.cabal view
@@ -1,5 +1,5 @@ name: graflog-version: 2.0.0+version: 3.0.0 synopsis: Monadic correlated log events description: Please see README.md homepage: https://github.com/m-arnold/graflog#readme@@ -21,6 +21,7 @@ , text , aeson , bytestring+ , containers default-language: Haskell2010 default-extensions: GeneralizedNewtypeDeriving DeriveFunctor FlexibleContexts FlexibleInstances @@ -35,6 +36,7 @@ , mtl , text , aeson+ , containers ghc-options: -threaded -rtsopts -with-rtsopts=-N default-language: Haskell2010 default-extensions: ConstraintKinds DeriveGeneric FlexibleContexts FlexibleInstances GADTs GeneralizedNewtypeDeriving KindSignatures LambdaCase MultiParamTypeClasses NamedFieldPuns OverloadedStrings RankNTypes ScopedTypeVariables TypeOperators DuplicateRecordFields
src/Graflog/Logger.hs view
@@ -7,9 +7,13 @@ , CorrelationId(..) , EventId(..) , Action(..)- , Protected(..) , logEvent' , jsonEncode+ , ToLog(..)+ , Log(..)+ , numToLog+ , dictionary+ , pair ) where import Data.Aeson@@ -17,21 +21,66 @@ import Data.ByteString (ByteString) import Data.ByteString.Lazy (toStrict) import Data.Maybe (fromJust)-import Data.String (IsString)+import Data.Map (Map(..))+import qualified Data.Map as Map+import Data.String (IsString(..)) import Data.Text (Text(..))-import Data.Text.Conversions (decodeConvertText, UTF8(..))+import Data.Text.Conversions (decodeConvertText, UTF8(..), toText) import Graflog.Console -newtype Protected a = Protected { unProtect :: a }- deriving (Functor, Show, Eq)+data Log+ = Dictionary (Map Text Log)+ | List [Log]+ | Message Text+ | Redacted+ deriving (Eq, Show) -instance ToJSON a => ToJSON (Protected a) where- toJSON (Protected a) = "(REDACTED)"+instance IsString Log where+ fromString = Message . toText -instance FromJSON a => FromJSON (Protected a) where- parseJSON v = Protected <$> parseJSON v+class ToLog a where+ toLog :: a -> Log +instance ToLog Log where+ toLog = id++instance ToLog Text where+ toLog = Message++instance ToLog a => ToLog [a] where+ toLog = List . fmap toLog++numToLog :: (Show a, Num a) => a -> Log+numToLog = Message . toText . show++instance ToLog Int where+ toLog = numToLog++instance ToLog Integer where+ toLog = numToLog++instance ToLog Float where+ toLog = numToLog++instance ToLog Double where+ toLog = numToLog++instance ToLog a => ToLog (Map Text a) where+ toLog = Dictionary . fmap toLog++dictionary :: [(Text, Log)] -> Log+dictionary = Dictionary . Map.fromList++pair :: ToLog a => Text -> a -> (Text, Log)+pair key value = (key, toLog value)++instance ToJSON Log where+ toJSON (Message a) = String a+ toJSON (List a) = toJSON a+ toJSON (Dictionary a) = toJSON a+ toJSON Redacted = String "(REDACTED)"+ class Monad m => Logger m where logEvent :: Event -> m () @@ -50,7 +99,6 @@ , _action :: Action , _message :: Value } deriving (Eq, Show)- deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''Event logEvent' :: Console m => Event -> m ()