Skip to content

Commit 0a66666

Browse files
committed
Remove LoggingT
1 parent 6809a4d commit 0a66666

File tree

6 files changed

+66
-30
lines changed

6 files changed

+66
-30
lines changed

example-handlers.cabal

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ library
8181
App.Db
8282
App.External
8383
App.Json
84+
App.Logging
8485
App.Req
8586
App.Scotty
8687
App.Servant
@@ -92,8 +93,8 @@ library
9293
, bytestring ^>= 0.11
9394
, http-client ^>= 0.7
9495
, http-types ^>= 0.12
95-
, microlens ^>= 0.4
9696
, modern-uri ^>= 0.3
97+
, monad-logger ^>= 0.3
9798
, mtl ^>= 2.3
9899
, postgresql-simple ^>= 0.7
99100
, req ^>= 3.13

src/App/AppEnv.hs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module App.AppEnv
22
( AppEnv
33
( AppEnv,
44
appEnvConfig,
5-
appEnvLogger,
5+
appEnvLogFunc,
66
appEnvHttpConfig,
77
appEnvDbPool
88
),
@@ -29,22 +29,20 @@ import App.Config
2929
configInit,
3030
)
3131
import App.Db (HasDbPool (getDbPool), dbInit)
32-
import Blammo.Logging (HasLogger (loggerL), Logger)
33-
import Blammo.Logging.Simple (newLoggerEnv)
32+
import App.Logging (HasLogFunc (getLogFunc), LogFunc, loggingInit)
3433
import Data.Pool (Pool)
3534
import Database.PostgreSQL.Simple (Connection)
36-
import Lens.Micro (lens)
3735
import Network.HTTP.Req (HttpConfig, defaultHttpConfig)
3836

3937
data AppEnv = AppEnv
4038
{ appEnvConfig :: Config,
41-
appEnvLogger :: Logger,
39+
appEnvLogFunc :: LogFunc,
4240
appEnvHttpConfig :: HttpConfig,
4341
appEnvDbPool :: Pool Connection
4442
}
4543

46-
instance HasLogger AppEnv where
47-
loggerL = lens appEnvLogger $ \x y -> x {appEnvLogger = y}
44+
instance HasLogFunc AppEnv where
45+
getLogFunc = appEnvLogFunc
4846

4947
instance HasCartConfig AppEnv where
5048
getBookingUrl = configBookingUrl . appEnvConfig
@@ -58,12 +56,12 @@ instance HasDbPool AppEnv where
5856
appEnvInit :: IO AppEnv
5957
appEnvInit = do
6058
config <- configInit
61-
logger <- newLoggerEnv
59+
logFunc <- loggingInit
6260
dbPool <- dbInit $ configDatabaseUrl config
6361
let app =
6462
AppEnv
6563
{ appEnvConfig = config,
66-
appEnvLogger = logger,
64+
appEnvLogFunc = logFunc,
6765
appEnvHttpConfig = defaultHttpConfig,
6866
appEnvDbPool = dbPool
6967
}

src/App/Logging.hs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
module App.Logging
2+
( LogFunc,
3+
HasLogFunc (getLogFunc),
4+
loggingInit,
5+
monadLoggerLogImpl,
6+
)
7+
where
8+
9+
import Blammo.Logging (MonadLoggerIO (askLoggerIO), runLoggerLoggingT)
10+
import Blammo.Logging.Simple (newLoggerEnv)
11+
import Control.Monad.IO.Class (MonadIO, liftIO)
12+
import Control.Monad.Logger
13+
( Loc,
14+
LogLevel,
15+
LogSource,
16+
LogStr,
17+
ToLogStr (toLogStr),
18+
)
19+
import Control.Monad.Reader (MonadReader, asks)
20+
21+
type LogFunc = Loc -> LogSource -> LogLevel -> LogStr -> IO ()
22+
23+
class HasLogFunc env where
24+
getLogFunc :: env -> LogFunc
25+
26+
loggingInit :: IO LogFunc
27+
loggingInit = do
28+
logger <- newLoggerEnv
29+
runLoggerLoggingT logger askLoggerIO
30+
31+
monadLoggerLogImpl ::
32+
(MonadReader env m, HasLogFunc env, MonadIO m, ToLogStr msg) =>
33+
Loc ->
34+
LogSource ->
35+
LogLevel ->
36+
msg ->
37+
m ()
38+
monadLoggerLogImpl loc logSource logLevel msg = do
39+
logFunc <- asks getLogFunc
40+
liftIO $ logFunc loc logSource logLevel (toLogStr msg)

src/App/Scotty.hs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,12 @@ import App.Cart
2020
)
2121
import App.Config (Config (configPurchaseDelay))
2222
import App.Json (defaultToJSON)
23+
import App.Logging (monadLoggerLogImpl)
2324
import Blammo.Logging
24-
( LoggingT,
25-
Message ((:#)),
25+
( Message ((:#)),
2626
MonadLogger (monadLoggerLog),
2727
logInfo,
2828
logWarn,
29-
runLoggerLoggingT,
3029
(.=),
3130
)
3231
import Control.Concurrent (threadDelay)
@@ -59,13 +58,12 @@ import Web.Scotty.Trans
5958
)
6059

6160
newtype App a = App
62-
{ unApp :: ReaderT AppEnv (LoggingT IO) a
61+
{ unApp :: ReaderT AppEnv IO a
6362
}
6463
deriving (Functor, Applicative, Monad, MonadIO, MonadReader AppEnv, MonadUnliftIO)
6564

6665
instance MonadLogger App where
67-
monadLoggerLog loc logSource logLevel msg =
68-
App $ lift $ monadLoggerLog loc logSource logLevel msg
66+
monadLoggerLog = monadLoggerLogImpl
6967

7068
instance (ScottyError e, MonadLogger m) => MonadLogger (ActionT e m) where
7169
monadLoggerLog loc logSource logLevel msg =
@@ -78,7 +76,7 @@ instance MonadHttp App where
7876
runApp :: App a -> IO a
7977
runApp m = do
8078
app <- appEnvInit
81-
runLoggerLoggingT app $ runReaderT (unApp m) app
79+
runReaderT (unApp m) app
8280

8381
data CartPurchaseResponse = CartPurchaseResponse
8482
{ cartPurchaseResponseCartId :: CartId,

src/App/Servant.hs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,18 @@ import App.Cart
1717
)
1818
import App.Config (Config (configPurchaseDelay))
1919
import App.Json (defaultToJSON)
20+
import App.Logging (monadLoggerLogImpl)
2021
import Blammo.Logging
21-
( LoggingT,
22-
Message ((:#)),
22+
( Message ((:#)),
2323
MonadLogger (monadLoggerLog),
2424
logInfo,
2525
logWarn,
26-
runLoggerLoggingT,
2726
(.=),
2827
)
2928
import Control.Concurrent (threadDelay)
3029
import Control.Monad.Except (ExceptT (ExceptT))
3130
import Control.Monad.IO.Class (MonadIO (liftIO))
3231
import Control.Monad.Reader (MonadReader, ReaderT, asks, runReaderT)
33-
import Control.Monad.Trans (lift)
3432
import Data.Aeson (ToJSON (toJSON), encode, object)
3533
import Data.Text (Text)
3634
import GHC.Generics (Generic)
@@ -63,21 +61,20 @@ import UnliftIO.Async (concurrently)
6361
import UnliftIO.Exception (catch, throwIO, try)
6462

6563
newtype App a = App
66-
{ unApp :: ReaderT AppEnv (LoggingT IO) a
64+
{ unApp :: ReaderT AppEnv IO a
6765
}
6866
deriving (Functor, Applicative, Monad, MonadReader AppEnv, MonadIO, MonadUnliftIO)
6967

7068
instance MonadLogger App where
71-
monadLoggerLog loc logSource logLevel msg =
72-
App $ lift $ monadLoggerLog loc logSource logLevel msg
69+
monadLoggerLog = monadLoggerLogImpl
7370

7471
instance MonadHttp App where
7572
handleHttpException = throwIO
7673
getHttpConfig = asks appEnvHttpConfig
7774

7875
appToHandler :: AppEnv -> App a -> Handler a
7976
appToHandler app m =
80-
Handler $ ExceptT $ try $ runLoggerLoggingT app $ runReaderT (unApp m) app
77+
Handler $ ExceptT $ try $ runReaderT (unApp m) app
8178

8279
type Api = "cart" :> Capture "cartId" CartId :> "purchase" :> Post '[JSON] CartPurchaseResponse
8380

src/App/Yesod.hs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ module App.Yesod
1111
)
1212
where
1313

14-
import App.AppEnv (AppEnv (appEnvConfig, appEnvHttpConfig), appEnvInit)
14+
import App.AppEnv
15+
( AppEnv (appEnvConfig, appEnvHttpConfig, appEnvLogFunc),
16+
appEnvInit,
17+
)
1518
import App.Cart
1619
( BookingId,
1720
CartException (CartException),
@@ -35,10 +38,8 @@ import App.Db (HasDbPool (getDbPool))
3538
import App.Json (defaultToJSON)
3639
import Blammo.Logging
3740
( Message ((:#)),
38-
MonadLogger (monadLoggerLog),
3941
logInfo,
4042
logWarn,
41-
runLoggerLoggingT,
4243
(.=),
4344
)
4445
import Control.Concurrent (threadDelay)
@@ -96,8 +97,9 @@ instance MonadHttp Handler where
9697
getHttpConfig = getsYesod appEnvHttpConfig
9798

9899
instance Yesod AppEnv where
99-
messageLoggerSource app _logger loc source level msg =
100-
runLoggerLoggingT app $ monadLoggerLog loc source level msg
100+
messageLoggerSource app _logger loc source level msg = do
101+
let logFunc = appEnvLogFunc app
102+
logFunc loc source level msg
101103

102104
makeSessionBackend _ = return Nothing
103105

0 commit comments

Comments
 (0)