51 lines
1.7 KiB
Haskell
51 lines
1.7 KiB
Haskell
module GHCup.Logger where
|
|
|
|
|
|
import GHCup
|
|
import GHCup.Types
|
|
import GHCup.Types.Optics
|
|
|
|
import Control.Monad
|
|
import Control.Exception.Safe
|
|
import Control.Monad.Reader.Class
|
|
import Control.Monad.IO.Class
|
|
import Control.Monad.Trans.Class ( lift )
|
|
import Control.Monad.Trans.Reader ( ReaderT
|
|
, runReaderT
|
|
)
|
|
import Data.List
|
|
import Data.String.QQ
|
|
import Data.String.Interpolate
|
|
import Data.Versions
|
|
import Data.IORef
|
|
import Optics
|
|
import System.Exit
|
|
import System.Console.Pretty
|
|
import System.IO
|
|
import Control.Monad.Logger
|
|
|
|
import qualified Data.Map.Strict as M
|
|
import qualified Data.ByteString as B
|
|
|
|
|
|
myLoggerT :: (B.ByteString -> IO ()) -> LoggingT m a -> m a
|
|
myLoggerT outter loggingt = runLoggingT loggingt mylogger
|
|
where
|
|
mylogger :: Loc -> LogSource -> LogLevel -> LogStr -> IO ()
|
|
mylogger loc source level str = do
|
|
let l = case level of
|
|
LevelDebug -> toLogStr (style Bold $ color Blue "[ Debug ]")
|
|
LevelInfo -> toLogStr (style Bold $ color Green "[ Info ]")
|
|
LevelWarn -> toLogStr (style Bold $ color Yellow "[ Warn ]")
|
|
LevelError -> toLogStr (style Bold $ color Red "[ Error ]")
|
|
LevelOther t -> toLogStr "[ " <> toLogStr t <> toLogStr " ]"
|
|
let out = fromLogStr (l <> toLogStr " " <> str <> toLogStr "\n")
|
|
outter out
|
|
|
|
myLoggerTStdout :: LoggingT m a -> m a
|
|
myLoggerTStdout = myLoggerT (B.hPut stdout)
|
|
|
|
myLoggerTStderr :: LoggingT m a -> m a
|
|
myLoggerTStderr = myLoggerT (B.hPut stderr)
|
|
|