@@ -20,7 +20,6 @@ module Development.IDE.Types.Logger
2020 , withDefaultRecorder
2121 , makeDefaultStderrRecorder
2222 , makeDefaultHandleRecorder
23- , priorityToHsLoggerPriority
2423 , LoggingColumn (.. )
2524 , cmapWithPrio
2625 , withBacklog
@@ -40,8 +39,7 @@ import Control.Concurrent.STM (atomically,
4039 readTVarIO ,
4140 writeTBQueue , writeTVar )
4241import Control.Exception (IOException )
43- import Control.Monad (forM_ , unless , when ,
44- (>=>) )
42+ import Control.Monad (unless , when , (>=>) )
4543import Control.Monad.IO.Class (MonadIO (liftIO ))
4644import Data.Foldable (for_ )
4745import Data.Functor.Contravariant (Contravariant (contramap ))
@@ -77,12 +75,7 @@ import qualified Colog.Core as Colog
7775import System.IO (Handle ,
7876 IOMode (AppendMode ),
7977 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+ openFile , stderr )
8679import UnliftIO (MonadUnliftIO ,
8780 displayException ,
8881 finally , try )
@@ -171,31 +164,24 @@ textHandleRecorder handle =
171164 Recorder
172165 { logger_ = \ text -> liftIO $ Text. hPutStrLn handle text *> hFlush handle }
173166
174- -- | Priority is actually for hslogger compatibility
175- makeDefaultStderrRecorder :: MonadIO m => Maybe [LoggingColumn ] -> Priority -> m (Recorder (WithPriority (Doc a )))
176- makeDefaultStderrRecorder columns minPriority = do
167+ makeDefaultStderrRecorder :: MonadIO m => Maybe [LoggingColumn ] -> m (Recorder (WithPriority (Doc a )))
168+ makeDefaultStderrRecorder columns = do
177169 lock <- liftIO newLock
178- makeDefaultHandleRecorder columns minPriority lock stderr
170+ makeDefaultHandleRecorder columns lock stderr
179171
180172-- | 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.
185173withDefaultRecorder
186174 :: MonadUnliftIO m
187175 => Maybe FilePath
188176 -- ^ Log file path. `Nothing` uses stderr
189177 -> Maybe [LoggingColumn ]
190178 -- ^ logging columns to display. `Nothing` uses `defaultLoggingColumns`
191- -> Priority
192- -- ^ min priority for hslogger compatibility
193179 -> (Recorder (WithPriority (Doc d )) -> m a )
194180 -- ^ action given a recorder
195181 -> m a
196- withDefaultRecorder path columns minPriority action = do
182+ withDefaultRecorder path columns action = do
197183 lock <- liftIO newLock
198- let makeHandleRecorder = makeDefaultHandleRecorder columns minPriority lock
184+ let makeHandleRecorder = makeDefaultHandleRecorder columns lock
199185 case path of
200186 Nothing -> do
201187 recorder <- makeHandleRecorder stderr
@@ -217,65 +203,20 @@ makeDefaultHandleRecorder
217203 :: MonadIO m
218204 => Maybe [LoggingColumn ]
219205 -- ^ built-in logging columns to display. Nothing uses the default
220- -> Priority
221- -- ^ min priority for hslogger compatibility
222206 -> Lock
223207 -- ^ lock to take when outputting to handle
224208 -> Handle
225209 -- ^ handle to output to
226210 -> m (Recorder (WithPriority (Doc a )))
227- makeDefaultHandleRecorder columns minPriority lock handle = do
211+ makeDefaultHandleRecorder columns lock handle = do
228212 let Recorder { logger_ } = textHandleRecorder handle
229213 let threadSafeRecorder = Recorder { logger_ = \ msg -> liftIO $ withLock lock (logger_ msg) }
230214 let loggingColumns = fromMaybe defaultLoggingColumns columns
231215 let textWithPriorityRecorder = cmapIO (textWithPriorityToText loggingColumns) threadSafeRecorder
232- -- see `setupHsLogger` comment
233- liftIO $ setupHsLogger lock handle [" hls" , " hie-bios" ] (priorityToHsLoggerPriority minPriority)
234216 pure (cmap docToText textWithPriorityRecorder)
235217 where
236218 docToText = fmap (renderStrict . layoutPretty defaultLayoutOptions)
237219
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-
279220data LoggingColumn
280221 = TimeColumn
281222 | ThreadIdColumn
0 commit comments