@@ -20,7 +20,6 @@ module Development.IDE.Types.Logger
20
20
, withDefaultRecorder
21
21
, makeDefaultStderrRecorder
22
22
, makeDefaultHandleRecorder
23
- , priorityToHsLoggerPriority
24
23
, LoggingColumn (.. )
25
24
, cmapWithPrio
26
25
, withBacklog
@@ -40,7 +39,7 @@ import Control.Concurrent.STM (atomically,
40
39
readTVarIO ,
41
40
writeTBQueue , writeTVar )
42
41
import Control.Exception (IOException )
43
- import Control.Monad (forM_ , unless , when ,
42
+ import Control.Monad (unless , when ,
44
43
(>=>) )
45
44
import Control.Monad.IO.Class (MonadIO (liftIO ))
46
45
import Data.Foldable (for_ )
@@ -76,13 +75,8 @@ import Colog.Core (LogAction (..),
76
75
import qualified Colog.Core as Colog
77
76
import System.IO (Handle ,
78
77
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 )
86
80
import UnliftIO (MonadUnliftIO ,
87
81
displayException ,
88
82
finally , try )
@@ -171,31 +165,24 @@ textHandleRecorder handle =
171
165
Recorder
172
166
{ logger_ = \ text -> liftIO $ Text. hPutStrLn handle text *> hFlush handle }
173
167
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
177
170
lock <- liftIO newLock
178
- makeDefaultHandleRecorder columns minPriority lock stderr
171
+ makeDefaultHandleRecorder columns lock stderr
179
172
180
173
-- | 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.
185
174
withDefaultRecorder
186
175
:: MonadUnliftIO m
187
176
=> Maybe FilePath
188
177
-- ^ Log file path. `Nothing` uses stderr
189
178
-> Maybe [LoggingColumn ]
190
179
-- ^ logging columns to display. `Nothing` uses `defaultLoggingColumns`
191
- -> Priority
192
- -- ^ min priority for hslogger compatibility
193
180
-> (Recorder (WithPriority (Doc d )) -> m a )
194
181
-- ^ action given a recorder
195
182
-> m a
196
- withDefaultRecorder path columns minPriority action = do
183
+ withDefaultRecorder path columns action = do
197
184
lock <- liftIO newLock
198
- let makeHandleRecorder = makeDefaultHandleRecorder columns minPriority lock
185
+ let makeHandleRecorder = makeDefaultHandleRecorder columns lock
199
186
case path of
200
187
Nothing -> do
201
188
recorder <- makeHandleRecorder stderr
@@ -217,65 +204,21 @@ makeDefaultHandleRecorder
217
204
:: MonadIO m
218
205
=> Maybe [LoggingColumn ]
219
206
-- ^ built-in logging columns to display. Nothing uses the default
220
- -> Priority
221
- -- ^ min priority for hslogger compatibility
222
207
-> Lock
223
208
-- ^ lock to take when outputting to handle
224
209
-> Handle
225
210
-- ^ handle to output to
226
211
-> m (Recorder (WithPriority (Doc a )))
227
- makeDefaultHandleRecorder columns minPriority lock handle = do
212
+ makeDefaultHandleRecorder columns lock handle = do
228
213
let Recorder { logger_ } = textHandleRecorder handle
229
214
let threadSafeRecorder = Recorder { logger_ = \ msg -> liftIO $ withLock lock (logger_ msg) }
230
215
let loggingColumns = fromMaybe defaultLoggingColumns columns
231
216
let textWithPriorityRecorder = cmapIO (textWithPriorityToText loggingColumns) threadSafeRecorder
232
217
-- see `setupHsLogger` comment
233
- liftIO $ setupHsLogger lock handle [" hls" , " hie-bios" ] (priorityToHsLoggerPriority minPriority)
234
218
pure (cmap docToText textWithPriorityRecorder)
235
219
where
236
220
docToText = fmap (renderStrict . layoutPretty defaultLayoutOptions)
237
221
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
-
279
222
data LoggingColumn
280
223
= TimeColumn
281
224
| ThreadIdColumn
0 commit comments