{-# LANGUAGE OverloadedStrings #-} module MailchimpSimple.Logger ( LogLevels(..) , writeLog ) where import Data.Time import System.FilePath.Posix import System.Directory ( doesDirectoryExist , createDirectory ) -- | Constructor for the Log levels data LogLevels = ERROR | DEBUG | INFO deriving (Show, Eq) -- { -- Constructor for the Log entry = (LogEntry LogLevels logging logInputData logMessage) -- logLevel -> Logging purpose (ERROR/INFO/DEBUG) -- loggingMethod-> Module of the program which writes the log -- logInputData -> Input data at the point of logging -- logMessage -> Output message of the method -- } data Logger = LogEntry LogLevels String String String deriving (Show, Eq) toString :: Logger -> IO String toString (LogEntry lLevel lMethod lInputData lMessage) = do utcTime <- getCurrentTime let myTime = addUTCTime 19800 utcTime return $ show myTime ++ ", [" ++ show lLevel ++ "], [" ++ lMethod ++ "], Input: " ++ lInputData ++ ", " ++ lMessage -- { -- Append the log entry to an external log file -- Error logs to 'error.log' file -- Other logs to 'access.log' file -- } writeLog :: LogLevels -> String -> String -> String -> IO () writeLog lLevel lMethod lInputData lMessage = do logEntry <- toString (LogEntry lLevel lMethod lInputData lMessage) let logEntryProcessed = logEntry ++ "\n" exists <- doesDirectoryExist "log" if (exists == True) then return () else (createDirectory "log") if lLevel == ERROR then appendFile ("log" ++ [pathSeparator] ++ "error.log") logEntryProcessed else appendFile ("log" ++ [pathSeparator] ++ "access.log") logEntryProcessed