{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE OverloadedStrings #-} {-| Module : GHCup.Utils.Logger Description : logger definition Copyright : (c) Julian Ospald, 2020 License : LGPL-3.0 Maintainer : hasufell@hasufell.de Stability : experimental Portability : portable Here we define our main logger. -} module GHCup.Prelude.Logger ( module GHCup.Prelude.Logger , module GHCup.Prelude.Logger.Internal ) where import GHCup.Prelude.Logger.Internal import GHCup.Types import GHCup.Types.Optics import GHCup.Utils.Dirs (fromGHCupPath) import GHCup.Prelude.Internal import GHCup.Prelude.File.Search (findFiles) import GHCup.Prelude.File (recycleFile) import GHCup.Prelude.String.QQ import Control.Exception.Safe import Control.Monad import Control.Monad.IO.Class import Control.Monad.Reader import Prelude hiding ( appendFile ) import System.FilePath import System.IO.Error import Text.Regex.Posix import qualified Data.ByteString as B initGHCupFileLogging :: ( MonadReader env m , HasDirs env , MonadIO m , MonadMask m ) => m FilePath initGHCupFileLogging = do Dirs { logsDir } <- getDirs let logfile = fromGHCupPath logsDir "ghcup.log" logFiles <- liftIO $ findFiles (fromGHCupPath logsDir) (makeRegexOpts compExtended execBlank ([s|^.*\.log$|] :: B.ByteString) ) forM_ logFiles $ hideError doesNotExistErrorType . recycleFile . (fromGHCupPath logsDir ) liftIO $ writeFile logfile "" pure logfile