git.iko.soy/typeable/control-logger
on master help sign in
control-logger.cabal+51−43
since splitsnapshots
unifiedsplit
@@ -1,47 +1,55 @@
1−cabal-version: 2.4
1+cabal-version: 2.4
2−name: control-logger
2+name: control-logger
3−version: 0.1.0.0
3+version: 0.1.0.0
4−synopsis: Logger used by all projects
4+synopsis: Logger used by all projects
5−license-file: LICENSE
5+license-file: LICENSE
6−build-type: Simple
6+build-type: Simple
7
7
8library
8library
9− hs-source-dirs: src
9+ hs-source-dirs: src
10− ghc-options: -Wall
10+ ghc-options: -Wall
11+
11 if !impl(ghcjs)
12 if !impl(ghcjs)
12− exposed-modules: Control.Logger
13+ exposed-modules:
14+ Control.Logger
13− Control.Logger.Katip
15+ Control.Logger.Katip
14− Control.Logger.Katip.Utils
16+ Control.Logger.Katip.Utils
15− Control.Logger.Orphans
17+ Control.Logger.Orphans
18+
16− exposed-modules: Control.Logger.Internal
19+ exposed-modules: Control.Logger.Internal
17− build-depends: base
20+ build-depends:
18− , aeson
21+ , aeson
22+ , base >=4.11
19− , bytestring
23+ , bytestring
20− , control-has
24+ , control-has
21− , control-has-katip
25+ , control-has-katip
22− , deepseq
26+ , deepseq
23− , exceptions
27+ , exceptions
24− , fast-logger
28+ , fast-logger >=2.4.11
25− , http-client
29+ , http-client
26− , lens
30+ , lens
27− , monad-logger
31+ , monad-logger
28− , mtl
32+ , mtl
29− , shakespeare
33+ , shakespeare
30− , text
34+ , text
31− , time
35+ , time
32− , unordered-containers
36+ , unordered-containers
37+
33 if !impl(ghcjs)
38 if !impl(ghcjs)
34− build-depends: katip >= 0.8.8.0
39+ build-depends:
40+ , katip >=0.8.8.0
35− , optparse-applicative
41+ , optparse-applicative
42+
36− default-language: Haskell2010
43+ default-language: Haskell2010
37− default-extensions: RankNTypes
44+ default-extensions:
45+ ConstraintKinds
38− DataKinds
46+ DataKinds
47+ DeriveGeneric
39− FlexibleContexts
48+ FlexibleContexts
40− FlexibleInstances
49+ FlexibleInstances
41− LambdaCase
50+ LambdaCase
42− OverloadedStrings
51+ OverloadedStrings
52+ RankNTypes
53+ RecordWildCards
43− ScopedTypeVariables
54+ ScopedTypeVariables
44− DeriveGeneric
45− ConstraintKinds
46− RecordWildCards
47− TypeSynonymInstances
55+ TypeSynonymInstances
src/Control/Logger.hs+2−5
@@ -44,7 +44,9 @@ import Control.Has
44import Control.Lens hiding (censoring)
44import Control.Lens hiding (censoring)
45import Control.Logger.Internal
45import Control.Logger.Internal
46import Control.Logger.Orphans ()
46import Control.Logger.Orphans ()
47+import Control.Monad
47import Control.Monad.Catch
48import Control.Monad.Catch
49+import Control.Monad.IO.Class
48import qualified Data.List as List
50import qualified Data.List as List
49import Data.Monoid
51import Data.Monoid
50import Data.Text (Text)
52import Data.Text (Text)
@@ -54,11 +56,6 @@ import GHC.Stack
54import Katip (ToObject (..))
56import Katip (ToObject (..))
55import System.Log.FastLogger
57import System.Log.FastLogger
56import Text.Shakespeare.Text (st)
58import Text.Shakespeare.Text (st)
57−-- import Control.Monad.RWS (censor)
58−#if MIN_VERSION_mtl(2,3,0)
59−import Control.Monad
60−import Control.Monad.IO.Class
61−#endif
62
59
63logError
60logError
64 :: (LoggingMonad r m)
61 :: (LoggingMonad r m)
src/Control/Logger/Internal.hs+17−5
@@ -16,14 +16,12 @@ module Control.Logger.Internal
16
16
17import Control.Has
17import Control.Has
18import Control.Lens
18import Control.Lens
19+import Control.Monad.IO.Class
19import Control.DeepSeq
20import Control.DeepSeq
20−import Data.Aeson (ToJSON, FromJSON, Object)
21+import Data.Aeson (ToJSON, FromJSON, Object, Value(..))
21import Data.Text (Text)
22import Data.Text (Text)
22import Data.Monoid
23import Data.Monoid
23import GHC.Stack
24import GHC.Stack
24−#if MIN_VERSION_mtl(2,3,0)
25−import Control.Monad.IO.Class
26−#endif
27
25
28
26
29data LogSeverity
27data LogSeverity
@@ -79,4 +77,18 @@ logMsgWith logger s t =
79 liftIO $ runLogger logger callStack s t
77 liftIO $ runLogger logger callStack s t
80
78
81runLogger :: Logger -> CallStack -> LogSeverity -> Text -> IO ()
79runLogger :: Logger -> CallStack -> LogSeverity -> Text -> IO ()
82−runLogger (Logger ctx theScrubber logger) cs ls txt = logger ctx cs ls (appEndo theScrubber txt)
80+runLogger (Logger ctx theScrubber logger) cs ls txt
81+ = logger (scrubContext theScrubber ctx) cs ls (appEndo theScrubber txt)
82+
83+
84+scrubContext :: Endo Text -> Object -> Object
85+scrubContext theScrubber = fmap doScrub
86+ where
87+ doScrub :: Value -> Value
88+ doScrub = \case
89+ Object object -> Object (fmap doScrub object)
90+ Array array -> Array (fmap doScrub array)
91+ String string -> String (appEndo theScrubber string)
92+ n@Number{} -> n
93+ b@Bool{} -> b
94+ n@Null -> n
src/Control/Logger/Orphans.hs+2−2
@@ -10,7 +10,7 @@ import Control.EnvT
10import Control.Has
10import Control.Has
11import Control.Logger.Internal
11import Control.Logger.Internal
12import Control.Monad.Logger
12import Control.Monad.Logger
13−import qualified Data.Text as T
13+import qualified Data.Text.Encoding as T
14import GHC.Stack
14import GHC.Stack
15
15
16
16
@@ -21,7 +21,7 @@ instance (Has Logger r, MonadIO m)
21 in withFrozenCallStack
21 in withFrozenCallStack
22 $ logMsg
22 $ logMsg
23 (mlLevelToLogSeverity level)
23 (mlLevelToLogSeverity level)
24− (T.pack . show . toLogStr $ msg)
24+ (T.decodeUtf8Lenient . fromLogStr . toLogStr $ msg)
25
25
26locToCallStack :: Loc -> CallStack
26locToCallStack :: Loc -> CallStack
27locToCallStack Loc {..} = fromCallSiteList
27locToCallStack Loc {..} = fromCallSiteList