diff --git a/graflog.cabal b/graflog.cabal
--- a/graflog.cabal
+++ b/graflog.cabal
@@ -1,5 +1,5 @@
 name:                graflog
-version:             1.0.0
+version:             2.0.0
 synopsis:            Monadic correlated log events
 description:         Please see README.md
 homepage:            https://github.com/m-arnold/graflog#readme
@@ -22,7 +22,7 @@
                      , aeson
                      , bytestring
   default-language:    Haskell2010
-  default-extensions:  GeneralizedNewtypeDeriving DeriveFunctor
+  default-extensions:  GeneralizedNewtypeDeriving DeriveFunctor FlexibleContexts FlexibleInstances
 
 test-suite graflog-test
   type:                exitcode-stdio-1.0
@@ -33,6 +33,8 @@
                      , test-fixture
                      , hspec
                      , mtl
+                     , text
+                     , aeson
   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
diff --git a/src/Graflog/Logger.hs b/src/Graflog/Logger.hs
--- a/src/Graflog/Logger.hs
+++ b/src/Graflog/Logger.hs
@@ -12,19 +12,25 @@
   , jsonEncode
   ) where
 
-import Data.Aeson (ToJSON, FromJSON, encode, Value)
+import Data.Aeson
 import Data.Aeson.TH (deriveJSON, defaultOptions, fieldLabelModifier)
 import Data.ByteString (ByteString)
 import Data.ByteString.Lazy (toStrict)
 import Data.Maybe (fromJust)
 import Data.String (IsString)
-import Data.Text (Text)
+import Data.Text (Text(..))
 import Data.Text.Conversions (decodeConvertText, UTF8(..))
 
 import Graflog.Console
 
 newtype Protected a = Protected { unProtect :: a }
   deriving (Functor, Show, Eq)
+
+instance ToJSON a => ToJSON (Protected a) where
+  toJSON (Protected a) = "(REDACTED)"
+
+instance FromJSON a => FromJSON (Protected a) where
+  parseJSON v = Protected <$> parseJSON v
 
 class Monad m => Logger m where
   logEvent :: Event -> m ()
