@@ -20,7 +20,6 @@ module Development.IDE.Types.Logger
2020 , withDefaultRecorder
2121 , makeDefaultStderrRecorder
2222 , makeDefaultHandleRecorder
23- , priorityToHsLoggerPriority
2423 , LoggingColumn (.. )
2524 , cmapWithPrio
2625 , withBacklog
@@ -40,7 +39,7 @@ import Control.Concurrent.STM (atomically,
4039 readTVarIO ,
4140 writeTBQueue , writeTVar )
4241import Control.Exception (IOException )
43- import Control.Monad (forM_ , unless , when ,
42+ import Control.Monad (unless , when ,
4443 (>=>) )
4544import Control.Monad.IO.Class (MonadIO (liftIO ))
4645import Data.Foldable (for_ )
@@ -76,13 +75,8 @@ import Colog.Core (LogAction (..),
7675import qualified Colog.Core as Colog
7776import System.IO (Handle ,
7877 IOMode (AppendMode ),
79- hClose , hFlush ,
80- hSetEncoding , openFile ,
81- stderr , utf8 )
82- import qualified System.Log.Formatter as HSL
83- import qualified System.Log.Handler as HSL
84- import qualified System.Log.Handler.Simple as HSL
85- import qualified System.Log.Logger as HsLogger
78+ hClose , hFlush , openFile ,
79+ stderr )
8680import UnliftIO (MonadUnliftIO ,
8781 displayException ,
8882 finally , try )
@@ -171,31 +165,24 @@ textHandleRecorder handle =
171165 Recorder
172166 { logger_ = \ text -> liftIO $ Text. hPutStrLn handle text *> hFlush handle }
173167
174- -- | Priority is actually for hslogger compatibility
175- makeDefaultStderrRecorder :: MonadIO m => Maybe [LoggingColumn ] -> Priority -> m (Recorder (WithPriority (Doc a )))
176- makeDefaultStderrRecorder columns minPriority = do
168+ makeDefaultStderrRecorder :: MonadIO m => Maybe [LoggingColumn ] -> m (Recorder (WithPriority (Doc a )))
169+ makeDefaultStderrRecorder columns = do
177170 lock <- liftIO newLock
178- makeDefaultHandleRecorder columns minPriority lock stderr
171+ makeDefaultHandleRecorder columns lock stderr
179172
180173-- | If no path given then use stderr, otherwise use file.
181- -- Kinda complicated because we also need to setup `hslogger` for
182- -- `hie-bios` log compatibility reasons. If `hie-bios` can be set to use our
183- -- logger instead or if `hie-bios` doesn't use `hslogger` then `hslogger` can
184- -- be removed completely. See `setupHsLogger` comment.
185174withDefaultRecorder
186175 :: MonadUnliftIO m
187176 => Maybe FilePath
188177 -- ^ Log file path. `Nothing` uses stderr
189178 -> Maybe [LoggingColumn ]
190179 -- ^ logging columns to display. `Nothing` uses `defaultLoggingColumns`
191- -> Priority
192- -- ^ min priority for hslogger compatibility
193180 -> (Recorder (WithPriority (Doc d )) -> m a )
194181 -- ^ action given a recorder
195182 -> m a
196- withDefaultRecorder path columns minPriority action = do
183+ withDefaultRecorder path columns action = do
197184 lock <- liftIO newLock
198- let makeHandleRecorder = makeDefaultHandleRecorder columns minPriority lock
185+ let makeHandleRecorder = makeDefaultHandleRecorder columns lock
199186 case path of
200187 Nothing -> do
201188 recorder <- makeHandleRecorder stderr
@@ -217,65 +204,21 @@ makeDefaultHandleRecorder
217204 :: MonadIO m
218205 => Maybe [LoggingColumn ]
219206 -- ^ built-in logging columns to display. Nothing uses the default
220- -> Priority
221- -- ^ min priority for hslogger compatibility
222207 -> Lock
223208 -- ^ lock to take when outputting to handle
224209 -> Handle
225210 -- ^ handle to output to
226211 -> m (Recorder (WithPriority (Doc a )))
227- makeDefaultHandleRecorder columns minPriority lock handle = do
212+ makeDefaultHandleRecorder columns lock handle = do
228213 let Recorder { logger_ } = textHandleRecorder handle
229214 let threadSafeRecorder = Recorder { logger_ = \ msg -> liftIO $ withLock lock (logger_ msg) }
230215 let loggingColumns = fromMaybe defaultLoggingColumns columns
231216 let textWithPriorityRecorder = cmapIO (textWithPriorityToText loggingColumns) threadSafeRecorder
232217 -- see `setupHsLogger` comment
233- liftIO $ setupHsLogger lock handle [" hls" , " hie-bios" ] (priorityToHsLoggerPriority minPriority)
234218 pure (cmap docToText textWithPriorityRecorder)
235219 where
236220 docToText = fmap (renderStrict . layoutPretty defaultLayoutOptions)
237221
238- priorityToHsLoggerPriority :: Priority -> HsLogger. Priority
239- priorityToHsLoggerPriority = \ case
240- Debug -> HsLogger. DEBUG
241- Info -> HsLogger. INFO
242- Warning -> HsLogger. WARNING
243- Error -> HsLogger. ERROR
244-
245- -- | The purpose of setting up `hslogger` at all is that `hie-bios` uses
246- -- `hslogger` to output compilation logs. The easiest way to merge these logs
247- -- with our log output is to setup an `hslogger` that uses the same handle
248- -- and same lock as our loggers. That way the output from our loggers and
249- -- `hie-bios` don't interleave strangely.
250- -- It may be possible to have `hie-bios` use our logger by decorating the
251- -- `Cradle.cradleOptsProg.runCradle` we get in the Cradle from
252- -- `HieBios.findCradle`, but I remember trying that and something not good
253- -- happened. I'd have to try it again to remember if that was a real issue.
254- -- Once that is figured out or `hie-bios` doesn't use `hslogger`, then all
255- -- references to `hslogger` can be removed entirely.
256- setupHsLogger :: Lock -> Handle -> [String ] -> HsLogger. Priority -> IO ()
257- setupHsLogger lock handle extraLogNames level = do
258- hSetEncoding handle utf8
259-
260- logH <- HSL. streamHandler handle level
261-
262- let logHandle = logH
263- { HSL. writeFunc = \ a s -> withLock lock $ HSL. writeFunc logH a s }
264- logFormatter = HSL. tfLogFormatter logDateFormat logFormat
265- logHandler = HSL. setFormatter logHandle logFormatter
266-
267- HsLogger. updateGlobalLogger HsLogger. rootLoggerName $ HsLogger. setHandlers ([] :: [HSL. GenericHandler Handle ])
268- HsLogger. updateGlobalLogger " haskell-lsp" $ HsLogger. setHandlers [logHandler]
269- HsLogger. updateGlobalLogger " haskell-lsp" $ HsLogger. setLevel level
270-
271- -- Also route the additional log names to the same log
272- forM_ extraLogNames $ \ logName -> do
273- HsLogger. updateGlobalLogger logName $ HsLogger. setHandlers [logHandler]
274- HsLogger. updateGlobalLogger logName $ HsLogger. setLevel level
275- where
276- logFormat = " $time [$tid] $prio $loggername:\t $msg"
277- logDateFormat = " %Y-%m-%d %H:%M:%S%Q"
278-
279222data LoggingColumn
280223 = TimeColumn
281224 | ThreadIdColumn
0 commit comments