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