module Network.Wai.Logger.Prefork (
    logCheck
  , logInit
  , logController
  , ApacheLogger
  , LogType(..)
  , IPAddrSource(..)
  , FileLogSpec(..)
  , LogController
  ) where

import Control.Concurrent
import Control.Monad
import Network.Wai.Logger
import Network.Wai.Logger.Prefork.File
import Network.Wai.Logger.Prefork.Stdout
import Network.Wai.Logger.Prefork.Types
import System.Log.FastLogger

logCheck :: LogType -> IO ()
logCheck LogNone   = return ()
logCheck LogStdout = return ()
logCheck (LogFile spec) = check spec

logInit :: IPAddrSource -> LogType -> IO ApacheLogger
logInit _ LogNone            = noLoggerInit
logInit ipsrc LogStdout      = stdoutLoggerInit ipsrc
logInit ipsrc (LogFile spec) = fileLoggerInit ipsrc spec

noLoggerInit :: IO ApacheLogger
noLoggerInit = return noLogger
  where
    noLogger _ _ _ = return ()

logController :: LogType -> LogController
logController LogNone        = noLoggerController
logController LogStdout      = noLoggerController
logController (LogFile spec) = fileLoggerController spec

noLoggerController :: LogController
noLoggerController _ = forever $ threadDelay 10000000