Skip to content

Commit 014c8f9

Browse files
fendorFendormichaelpj
authored
Remove hslogger from codebase (#3526)
Co-authored-by: Fendor <walross.power@gmail.com> Co-authored-by: Michael Peyton Jones <me@michaelpj.com>
1 parent adf6622 commit 014c8f9

File tree

9 files changed

+17
-81
lines changed

9 files changed

+17
-81
lines changed

exe/Main.hs

+3-3
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ main :: IO ()
5151
main = do
5252
-- plugin cli commands use stderr logger for now unless we change the args
5353
-- parser to get logging arguments first or do more complicated things
54-
pluginCliRecorder <- cmapWithPrio pretty <$> makeDefaultStderrRecorder Nothing Info
54+
pluginCliRecorder <- cmapWithPrio pretty <$> makeDefaultStderrRecorder Nothing
5555
args <- getArguments "haskell-language-server" (Plugins.idePlugins (cmapWithPrio LogPlugins pluginCliRecorder))
5656

5757
(lspLogRecorder, cb1) <- Logger.withBacklog Logger.lspClientLogRecorder
@@ -71,7 +71,7 @@ main = do
7171
in (argsTesting, minPriority, argsLogFile)
7272
_ -> (False, Info, Nothing)
7373

74-
withDefaultRecorder logFilePath Nothing minPriority $ \textWithPriorityRecorder -> do
74+
withDefaultRecorder logFilePath Nothing $ \textWithPriorityRecorder -> do
7575
let
7676
recorder = cmapWithPrio (pretty &&& id) $ mconcat
7777
[textWithPriorityRecorder
@@ -87,7 +87,7 @@ main = do
8787
-- ability of lsp-test to detect a stuck server in tests and benchmarks
8888
& if argsTesting then cfilter (not . heapStats . snd . payload) else id
8989
]
90-
plugins = (Plugins.idePlugins (cmapWithPrio LogPlugins recorder))
90+
plugins = Plugins.idePlugins (cmapWithPrio LogPlugins recorder)
9191

9292
defaultMain
9393
(cmapWithPrio LogIdeMain recorder)

exe/Wrapper.hs

+2-4
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,10 @@ import qualified Data.Text as T
4545
import qualified Data.Text.IO as T
4646
import Development.IDE.LSP.LanguageServer (runLanguageServer)
4747
import qualified Development.IDE.Main as Main
48-
import Development.IDE.Types.Logger (Logger (Logger),
48+
import Development.IDE.Types.Logger (Doc, Logger (Logger),
4949
Pretty (pretty),
50-
Priority (Info),
5150
Recorder (logger_),
5251
WithPriority (WithPriority),
53-
Doc,
5452
cmapWithPrio,
5553
makeDefaultStderrRecorder,
5654
toCologActionWithPrio)
@@ -76,7 +74,7 @@ main = do
7674
args <- getArguments "haskell-language-server-wrapper" mempty
7775

7876
hlsVer <- haskellLanguageServerVersion
79-
recorder <- makeDefaultStderrRecorder Nothing Info
77+
recorder <- makeDefaultStderrRecorder Nothing
8078
case args of
8179
ProbeToolsMode -> do
8280
programsOfInterest <- findProgramVersions

ghcide/exe/Main.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ main = withTelemetryLogger $ \telemetryLogger -> do
7777
-- stderr recorder just for plugin cli commands
7878
pluginCliRecorder <-
7979
cmapWithPrio pretty
80-
<$> makeDefaultStderrRecorder (Just [PriorityColumn, DataColumn]) Info
80+
<$> makeDefaultStderrRecorder (Just [PriorityColumn, DataColumn])
8181

8282
let hlsPlugins = pluginDescToIdePlugins (GhcIde.descriptors (cmapWithPrio LogGhcIde pluginCliRecorder))
8383
-- WARNING: If you write to stdout before runLanguageServer
@@ -94,7 +94,7 @@ main = withTelemetryLogger $ \telemetryLogger -> do
9494

9595
let minPriority = if argsVerbose then Debug else Info
9696

97-
docWithPriorityRecorder <- makeDefaultStderrRecorder (Just [PriorityColumn, DataColumn]) minPriority
97+
docWithPriorityRecorder <- makeDefaultStderrRecorder (Just [PriorityColumn, DataColumn])
9898

9999
(lspLogRecorder, cb1) <- Logger.withBacklog Logger.lspClientLogRecorder
100100
(lspMessageRecorder, cb2) <- Logger.withBacklog Logger.lspClientMessageRecorder

ghcide/ghcide.cabal

-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ library
9191
transformers,
9292
unordered-containers >= 0.2.10.0,
9393
vector,
94-
hslogger,
9594
Diff ^>=0.4.0,
9695
vector,
9796
opentelemetry >=0.6.1,

ghcide/src/Development/IDE/Types/Logger.hs

+8-67
Original file line numberDiff line numberDiff line change
@@ -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)
4241
import Control.Exception (IOException)
43-
import Control.Monad (forM_, unless, when,
44-
(>=>))
42+
import Control.Monad (unless, when, (>=>))
4543
import Control.Monad.IO.Class (MonadIO (liftIO))
4644
import Data.Foldable (for_)
4745
import Data.Functor.Contravariant (Contravariant (contramap))
@@ -77,12 +75,7 @@ import qualified Colog.Core as Colog
7775
import 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)
8679
import 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.
185173
withDefaultRecorder
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-
279220
data LoggingColumn
280221
= TimeColumn
281222
| ThreadIdColumn

ghcide/test/exe/Main.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ waitForAllProgressDone = loop
200200

201201
main :: IO ()
202202
main = do
203-
docWithPriorityRecorder <- makeDefaultStderrRecorder (Just [PriorityColumn, DataColumn]) Debug
203+
docWithPriorityRecorder <- makeDefaultStderrRecorder (Just [PriorityColumn, DataColumn])
204204

205205
let docWithFilteredPriorityRecorder@Recorder{ logger_ } =
206206
docWithPriorityRecorder

haskell-language-server.cabal

-1
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,6 @@ executable haskell-language-server-wrapper
510510
, ghcide
511511
, gitrev
512512
, haskell-language-server
513-
, hslogger
514513
, hie-bios
515514
, hls-plugin-api
516515
, lsp

hls-test-utils/src/Test/Hls.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ pluginTestRecorder = do
240240
-- See 'runSessionWithServer'' for details.
241241
initialiseTestRecorder :: Pretty a => [String] -> IO (Recorder (WithPriority a), WithPriority (Doc ann) -> IO ())
242242
initialiseTestRecorder envVars = do
243-
docWithPriorityRecorder <- makeDefaultStderrRecorder Nothing Debug
243+
docWithPriorityRecorder <- makeDefaultStderrRecorder Nothing
244244
-- There are potentially multiple environment variables that enable this logger
245245
definedEnvVars <- forM envVars (\var -> fromMaybe "0" <$> lookupEnv var)
246246
let logStdErr = any (/= "0") definedEnvVars

plugins/hls-hlint-plugin/hls-hlint-plugin.cabal

-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ library
4949
, hashable
5050
, hlint < 3.6
5151
, hls-plugin-api ^>=1.6
52-
, hslogger
5352
, lens
5453
, lsp
5554
, refact

0 commit comments

Comments
 (0)