fQv@      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                  !"#$%&'()*+,-./0123456789:;<=>?None"#16Kh-Performs given action on file if file exists.None"#16KhLogger name to keep in context. formatter which restricts type.Defined such that n1 is parent for  (n1 <> n2) (see  Nhttp://hackage.haskell.org/package/hslogger-1.2.10/docs/System-Log-Logger.htmlhslogger description).None"#167;=>?FKTh pThis type class exists to remove boilerplate logging by adding the logger's name to the context in each module.(TODO: replace current methods with Lens? Extract logger name from contextChange logger name in contextSet logger name in context.#Change logger name to the given one   None"#16;=>?FKThUDefault implementation of WithNamedLogger.Runs a  with specified initial .None "#16Kh$@=Data structure similar to queue but pops out elements after A if B > C.DClass for objects that have size. Implementations can take size as amount of memory items take, as amount of items in container, etc.ECreates new memory queue.FRemoves last element from @.AjAdd new element at the beginning removing elements from the end until size become not greater than limit.G#Converts queue to list of messages. @HIJKDLCBEFAG@HIJKDLNone"#16Kh.A/Internal type of log records.1Set of 2.2]Severity is level of log message importance. It uniquely determines which messages to print.3Debug messages4 Information5)Important (more than average) information6General warnings7General errors/severe errors8M of all 2s.9 Returns the M of 22s of elements greater or equal to the given value.:Returns M of 2s not less than 3.;Returns M of 2s not less than 4.<Returns M of 2s not less than 5.=Returns M of 2s not less than 6.>Returns M of 2s not less than 7.? Excludes 7 from the M of 2s./0123745689:;<=>?2345671/089:;<=>?/0234567(c) Serokell, 2016GPL-3 (see the file LICENSE)Serokell <hi@serokell.io> experimental POSIX, GHCNone"#16Kh2BNEDefines pre- and post-printed characters for printing colorized text.O Colorizes Text.OP(c) Serokell, 2016GPL-3 (see the file LICENSE)Serokell <hi@serokell.io> experimental POSIX, GHCNone "#%16KhPJUA LogFormatter is used to format log messages. Note that it is paramterized on the Handlery to allow the formatter to use information specific to the handler (an example of can be seen in the formatter used in )K<Returns the passed message as is, ie. no formatting is done.Q Replace some R+ variables in a string with supplied valuesL3An extensible formatter that allows new substition  variables to be defined. Each variable has an associated IO action that is used to produce the string to substitute for the variable name. The predefined variables are the same as for N  excluding $time and $utcTime.MLike NW but allow the time format to be specified in the first parameter (this is passed to )NTakes a format string, and returns a formatter that may be used to format log messages. The format string may contain variables prefixed with a $-sign which will be replaced at runtime with corresponding values. The currently supported variables are:$msg - The actual log message $loggername - The name of the logger$prio$ - The priority level of the message$tid - The thread ID$pid* - Process ID (Not available on windows)$time - The current time$utcTime - The current time in UTC TimeOsFormats UTC time in next format: "%Y-%m-%d %H:%M:%S%Q %Z" but %Q part show only in centiseconds (always 2 digits).PGet the current time rounded to 10^n picoseconds. n = 3 rounds to the nearest nanosecond. n = 6 rounds to the nearest microsecond. n = 9 will round to the nearest millisecond. n = 12 will round to the nearest second.J0The LogHandler that the passed message came fromThe log message and priorityThe logger nameThe formatted log messageQEA list of (variableName, action to get the replacement string) pairsText to perform substitution onResulting string JKLMNOPQR QROPJKNML$Copyright (C) 2004-2011 John GoerzenBSD3$John Goerzen <jgoerzen@complete.org> provisionalportableNone "#16<FKTh^ S\This is the base class for the various log handlers. They should all adhere to this class.T6Tag of handler. Is arbitrary. Made for identification.USets the log level. handle% will drop items beneath this level.VGets the current level.W@Set a log formatter to customize the log format for this HandlerYAForces an event to be logged regardless of the configured level.ZxRead back from logger (e.g. file), newest first. You specify the number of (newest) logging entries. Logger can return pure []5 if this behaviour can't be emulated or store buffer.[DCloses the logging system, causing it to close any open files, etc.\Tag identifying handlers._MLogs an event if it meets the requirements given by the most recent call to U. S[TVUZWXY\]^_ \]^STUVWXYZ[_STUVWXYZ[\]^$Copyright (C) 2004-2011 John GoerzenBSD3$John Goerzen <jgoerzen@complete.org> provisionalportableNone "#16FKThkc Options for {.d4Automatically log process ID (PID) with each messagee%Send a copy of each message to stderrfHFacilities are used by the system to determine where messages are sent. gBKernel messages; you should likely never use this in your programshCGeneral userland messages. Use this if nothing else is appropriatei E-Mail systemj Daemon (server process) messagesk#Authentication or security messageslKInternal syslog messages; you should likely never use this in your programsmPrinter messagesn Usenet newso UUCP messagesp Cron messagesqPrivate authentication messagesr FTP messagessCLOCAL0 through LOCAL7 are reserved for you to customize as you wish{fInitialize the Syslog system using the local system's default interface, /dev/log. Will return a new .On Windows, instead of using /dev/log, this will attempt to send UDP messages to something listening on the syslog port (514) on localhost.Use } if you need more control.|CInitialize the Syslog system using an arbitrary Unix socket (FIFO).Not supported under Windows.} Log to a remote server via UDP. ~LThe most powerful initialization mechanism. Takes an open datagram socket. {CThe name of this program -- will be prepended to every log message A list of c's. The list [] is perfectly valid. [d ] is probably most common here.The f= value to pass to the syslog system for every message logged]Messages logged below this priority will be ignored. To include every message, set this to DEBUG.Returns the new handler| Path to FIFO Program namecsFacility value Severities}/Usually AF_INET or AF_INET6; see Network.SocketRemote hostname. Some use  localhost514 is the default for syslog Program namecsFacility valueSeverity limit~A datagram socketAddress for transmissions*socket connection mode (stream / datagram) Program namecsFacility valueSeverity limitbcdefghijklmnopqrstuvwxyz{|}~b{|}~fghijklmnopqrstuvwxyzcdeb STUVWXYZ[cdefghijklmnopqrstuvwxyz $Copyright (C) 2004-2011 John GoerzenBSD3$John Goerzen <jgoerzen@complete.org> provisionalportableNone "#16FKThQA helper data type.?Default action which just prints to handle using given message.\^Creates custom write action and memory queue where write action updates memory queue as well.yCreate a stream log handler. Log messages sent to this handler will be sent to the stream used initially. Note that the [c method will have no effect on stream handlers; it does not actually close the underlying stream.Create a file log handler. Log messages sent to this handler will be sent to the filename specified, which will be opened in Append mode. Calling [$ on the handler will close the file.  (c) Serokell, 2016GPL-3 (see the file LICENSE)Serokell <hi@serokell.io> experimental POSIX, GHCNone "#16<KVh:Wrapper over file handler with additional rounding option.Path to the file to be handled.vRound timestamps to this power of 10 picoseconds. Just 3 would round to nanoseconds. Just 12 would round to seconds..Stores configuration for hierarchical loggers.!Logger configuration which keeps  and .+Rotation parameters for logger config. See .Severity for terminal ] output. If Nothing along with  then Warning and greater excluding Error are used.Severity for terminal ^ output. If Nothing along with  then Error is used.RShow time for non-error messages. Note that error messages always have timestamp.Show ThreadId for current logging thread.)Specifies action for printing to console.0Defines how to transform logger names in config.'Path prefix to add for each logger fileHierarchical tree of loggers. Parameters for logging rotation.max size of file in bytesnumber of files to keep[Useful lens combinator to be used for logging initialization. Usually should be used with .3Zooming into logger name with putting specific key./Checks if logger rotation parameters are valid.Setup  to specified severity inside .Setup  to specified severity inside .Setup  to _ inside .Setup  to _ inside .Setup lcConsoleOutput inside .5Adds sensible predefined set of parameters to logger.Setup  inside .Setup  inside  to optional prefix.Setup  inside  to specific prefix.This instances violates fromJSON . toJSON = identity@ rule but doesn't matter because it is used only for debugging.44  None"#16Khd Similar to . But holds file ` inside mutable variable (a) to be able to rotate loggers. Create rotation logging handler.  $Copyright (C) 2004-2011 John GoerzenBSD3$John Goerzen <jgoerzen@complete.org> provisionalportableNone"#16CKNV^hևPThe name of the root logger, which is always defined and present on the system.b7The log tree. Initialize it with a default root logger.cXGiven a name, return all components of it, starting from the root. Example return value: >["", "MissingH", "System.Cmd.Utils", "System.Cmd.Utils.pOpen"]9Log a message using the given logger at a given priority.Returns the logger for the given name. If no logger with that name exists, creates new loggers and any necessary parent loggers, with no connected handlers.Returns the root logger.dHandle a log request.Sets file prefix to e.Add handler to . Returns a new .Remove a handler from the g. Handlers are removed in the reverse order they were added, so the following property holds for any S h: !removeHandler . addHandler h = id'If no handlers are associated with the , it is returned unchanged.The root logger's default handler that writes every message to stderr can be removed by using this function before any handlers have been added to the root logger: /updateGlobalLogger rootLoggerName removeHandlerSet the  'Logger'\'Rs list of handlers to the list supplied. All existing handlers are removed first.NReturns the "level" of the logger. Items beneath this level will be ignored.Sets the "level" of the . Returns a new  object with the new level.Clears the "level" of the 2. It will now inherit the level of | its parent.ISet severities for given logger. By default parent's severities are used.Set or clear severities.cUpdates the global record for the given logger to take into account any changes you may have made.Helps you make changes on the given logger. Takes a function that makes changes and writes those changes back to the global database. Here's an example from above ("s" is a S): _updateGlobalLogger "MyApp.BuggyComponent" (setLevel DEBUG . setHandlers [s])1Allow graceful shutdown. Release all opened fileshandlersetc.1Retrieves content of log file(s) given path (w/o  _lcFilePrefix2, as specified in your config). Example: there's  component.log+ in config, but this function will return '[component.log.122, component.log.123]5 if you want to. Content is file lines newest first.FYI: this function is implemented to avoid the following problem: log-warper holds open handles to files, so trying to open log file for read would result in  IOException.Name of the logger to useSeverity of this messageThe log text itself Logger nameFunction to call237456234567fghijkelmn None "#+167;=>?FKQTVh JInstances of this class should explain how they add messages to their log.Type alias for constraints  and o>. It is a very common situation to use both of them together.Type alias for constraints  and  s. We need two different type classes to support more flexible interface but in practice we usually use them both. Shortcut for  to use according severity. Shortcut for  to use according severity. Shortcut for  to use according severity. Shortcut for  to use according severity. Shortcut for  to use according severity.BLogs message with specified severity using logger name in context.\It's very common situation when we need to write log messages inside functions that work in p.QTo do so we need to configure logger name each time inside work of this function. liftLogIO9 is the easiest way to deal with such kind of situations. Usage ExampleWe have some function clientStart :: HostName -> .. -> IO ClientComponentMap clientStart hostName .. = do ... forkIO $ routeIncoming endPoint msgs ... We need to log 7 messages in  routeIncoming& function. To do that we firstly need  clientStart to work in o clientStart :: (MonadIO m) => HostName -> .. -> m ClientComponentMap clientStart hostName .. = do ... liftIO $ forkIO $ routeIncoming endPoint msgs ... After we added some  into  routeIncoming  clientStart should now work in . Thus we can use  which is combination of o and -. Taking into consideration all above we get: clientStart :: WithLoggerIO m => HostName -> .. -> m ClientComponentMap clientStart hostName .. = do ... logName <- askLoggerName liftIO $ forkIO $ usingLoggerName logName $ routeIncoming endPoint msgs ... 0So, here we see how useful this function can be. clientStart :: WithLoggerIO m => HostName -> .. -> m ClientComponentMap clientStart hostName .. = do ... liftLogIO forkIO $ routeIncoming endPoint msgs ...  None "#+16;=>?FKQTVh Pure implementation of X type class. Instead of writing log messages into console it appends log messages into q log. It uses DList] for better performance, because messages can be added only at the end of log. But it uses unsafePerformIO so use with caution within IO.TODO: Should we use some  Data.Tree@-like structure to observe message only by chosen logger names?#Holds all required information for dispatchLoggerName function.-Return log of pure logging action as list of . Logs all  LogEvent'<s from given list. This function supposed to be used after . Logs all  LogEvent's from given list. Just like  but uses proper logger Name.4Performs actual logging once given action completes.-Return log of pure logging action as list of ), using logger name provided by context.  Similar to 0, but provides logger name from current context. Running the . gives us the pair of target and the list of s, wrapped in r from where using the fact that (,) is s logging can be triggered.Example  newtype PureSmth a = ... deriving (MonadSmth, ...) instance MonadSmth m => MonadSmt (NamedLoggerName m) evalPureSmth :: PureSmth a -> a makeField :: MonadSmth m => Data -> m Field run :: (MonadIO m, WithLogger m) => m () run = do data <- getData -- field :: Field field <- launchNamedPureLog (pure . evalPureSmth) (makeField data) -- ^ logging happens here ... ! Similar to   , but calls t on passed function result.ExampleThe example from  , with usage of this function will look like:  newtype PureSmth a = ... deriving (MonadSmth, ...) instance MonadSmth m => MonadSmt (NamedLoggerName m) evalPureSmth :: PureSmth a -> a makeField :: MonadSmth m => Data -> m Field run :: (MonadIO m, WithLogger m) => m () run = do data <- getData -- field :: Field field <- launchNamedPureLogWith evalPureSmth $ makeField data -- ^ logging happens here ... " Similar to !, but using provided logger name.#ZPerform pure-logging computation, log its events and return the result of the computation !"# !"#None "#16KVh%7#Logs exception's description with ' 8/Runs the action, if an exception is raised the 7 is executed.Example%Here is very simple example of usage 8 on IO functions: Omain :: IO () main = do buildAndSetupYamlLogging productionB "log-config.yaml" usingLoggerName "new-logger" runWithExceptionLog runWithExceptionLog :: (WithLoggerIO m, MonadCatch m) => m () runWithExceptionLog = catchLog @IOException (liftIO simpleIOfun) simpleIOfun :: IO () simpleIOfun = getLine >>= readFile >>= putStrLn and when run you will get:run-main-from-this-example> not-existing-filename.txti[new-logger:ERROR] [2017-12-01 13:07:33.21 UTC] asd: openFile: does not exist (No such file or directory)7878(c) Serokell, 2016GPL-3 (see the file LICENSE)Serokell <hi@serokell.io> experimental POSIX, GHCNone "#%16Kh39This function initializes global logging system for terminal output. At high level, it sets severity which will be used by all loggers by default, sets default formatters and sets custom severity for given loggers (if any).>NOTE: you probably don't want to use this function. Consider .On a lower level it does the following: 1. Removes default handler from root logger, sets two handlers such that: 1.1. All messages are printed to stdout(. 1.2. Moreover messages with at least Error severity are printed to stderrq. 2. Sets given Severity to root logger, so that it will be used by descendant loggers by default. 3. Applies  setSeverity/ to given loggers. It can be done later using  setSeverity directly.9 Show time?Show ThreadId?99(c) Serokell, 2016GPL-3 (see the file LICENSE)Serokell <hi@serokell.io> experimental POSIX, GHCNone "#16CKVhL::This function traverses # initializing all subloggers with 1/ and redirecting output in file handlers. See  for more details.;*Parses logger config from given file path.<FApplies given builder to parsed logger config and initializes logging.= Initializes logging using given u; to logger configurations, runs the action with the given .>-Default logging configuration with the given .Enabled flags: of the root logger is set to = ( and upper) for the given logger is set to : ( and upper)I is set to 'Any True' which means that time is shown in the log messages. is set to # which turns the console output on.Example defaultConfig "example"" will produce such configurations: arotation: null showTid: false showTime: true printOutput: true logTree: _ltSubloggers: example: _ltSubloggers: {} _ltSeverity: - Debug - Info - Notice - Warning - Error _ltFiles: [] _ltSeverity: - Warning - Error _ltFiles: [] termSeveritiesOut: null filePrefix: null termSeveritiesErr: null ?Set ups the logging with >$ and runs the action with the given .Example7Here we can see very simple working example of logging::{launchSimpleLogging "app" $ dologDebug "Debug message"putStrLn "Usual printing"logInfo "Job's done!":}6[app:DEBUG] [2017-12-07 11:25:06.47 UTC] Debug messageUsual printing3[app:INFO] [2017-12-07 11:25:06.47 UTC] Job's done!:;<=>?<>=?;:vw(c) Serokell, 2016GPL-3 (see the file LICENSE)Serokell <hi@serokell.io> experimental POSIX, GHCNone"#16KhNd /0123745689:;<=>?bcdefghijklmnopqrstuvwxyz{|}~ !"#789:;<=>?x !!"#$%&'()*+,-./0123456789::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                      o n                             !""#$$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSLTUVWXYZ[\]^_`a{bcdefg hijkijlmnoipqirs t u v w  x y z { { w | }i~mniiii'log-warper-1.7.3-CbGZVIdaJo8GPDmz16FzJ7System.Wlog.FileUtilsSystem.Wlog.LoggerNameSystem.Wlog.HasLoggerNameSystem.Wlog.LoggerNameBoxSystem.Wlog.SeveritySystem.Wlog.FormatterSystem.Wlog.LogHandlerSystem.Wlog.LogHandler.SyslogSystem.Wlog.LogHandler.SimpleSystem.Wlog.LoggerConfigSystem.Wlog.LogHandler.RollerSystem.Wlog.IOLoggerSystem.Wlog.CanLogSystem.Wlog.PureLoggingSystem.Wlog.ExceptionSystem.Wlog.TerminalSystem.Wlog.LauncherSystem.Wlog.MemoryQueueSystem.Wlog.ColorSystem.Log.HandlerSyslogDate.Time.Format formatTime LogHandler System.WlogRollerErrorSeverity setupLoggingWarningDebug whenExist LoggerName getLoggerName loggerNameF$fBuildableLoggerName$fMonoidLoggerName$fSemigroupLoggerName$fShowLoggerName$fIsStringLoggerName$fEqLoggerName$fOrdLoggerName$fHashableLoggerName HasLoggerName askLoggerNamemodifyLoggerName setLoggerName withSublogger$fHasLoggerNameIdentity$fHasLoggerNameRWST$fHasLoggerNameRWST0$fHasLoggerNameContT$fHasLoggerNameExceptT$fHasLoggerNameWriterT$fHasLoggerNameStateT$fHasLoggerNameStateT0$fHasLoggerNameReaderT LoggerNameBoxloggerNameBoxEntryusingLoggerName$fHasLoggerNameLoggerNameBox$fMFunctorTYPELoggerNameBox $fMonadBaseControlbLoggerNameBox$fMonadReaderrLoggerNameBox$fFunctorLoggerNameBox$fApplicativeLoggerNameBox$fMonadLoggerNameBox$fMonadIOLoggerNameBox$fMonadTransLoggerNameBox$fMonadBaseLoggerNameBox$fMonadThrowLoggerNameBox$fMonadCatchLoggerNameBox$fMonadMaskLoggerNameBox$fMonadErrorLoggerNameBox$fMonadStateLoggerNameBox$fMonadFixLoggerNameBox LogRecordLR SeveritiesInfoNotice allSeverities severityPlus debugPlusinfoPlus noticePlus warningPlus errorPlus excludeError$fToJSONSeverity$fFromJSONSeverity $fEqSeverity $fOrdSeverity$fEnumSeverity$fBoundedSeverity$fShowSeverity$fReadSeverity$fGenericSeverity$fShowLogRecord LogFormatter nullFormatter varFormattertfLogFormattersimpleLogFormatter centiUtcTimeFgetRoundedTimestdoutFormatterstdoutFormatterTimeRoundedgetTagsetLevelgetLevel setFormatter getFormatteremitreadBackclose LogHandlerTagHandlerFilelike HandlerOtherlogHandlerMessage$fShowLogHandlerTag$fEqLogHandlerTag SyslogHandlerOptionPIDPERRORFacilityKERNUSERMAILDAEMONAUTHSYSLOGLPRNEWSUUCPCRONAUTHPRIVFTPLOCAL0LOCAL1LOCAL2LOCAL3LOCAL4LOCAL5LOCAL6LOCAL7openlog openlog_localopenlog_remoteopenlog_generic$fLogHandlerSyslogHandler $fEqFacility$fShowFacility$fReadFacility $fEqOption $fShowOption $fReadOptionGenericHandler severities formatterprivData writeFunc closeFuncreadBackBufferghTagdefaultHandleAction streamHandler fileHandler$fLogHandlerGenericHandler HandlerWrap _hwFilePath _hwRounding$fGenericHandlerWrap$fShowHandlerWrap LoggerTree _ltSubloggers_ltFiles _ltSeverity LoggerMap hwFilePath hwRounding$fGenericLoggerTree$fShowLoggerTree LoggerConfig _lcRotation_lcTermSeverityOut_lcTermSeverityErr _lcShowTime _lcShowTid_lcConsoleAction _lcMapper _lcFilePrefix_lcTreeRotationParameters rpLogLimit rpKeepFilesltFiles ltSeverity ltSubloggers fromScratch zoomLoggerisValidRotation$fFromJSONLoggerTree$fToJSONLoggerTree$fFromJSONHandlerWrap$fToJSONHandlerWrap$fMonoidLoggerTree$fFromJSONRotationParameters$fToJSONRotationParameters$fBuildableRotationParameters$fGenericRotationParameters$fShowRotationParameterslcConsoleAction lcFilePrefixlcMapper lcRotation lcShowTid lcShowTimelcTermSeverityErrlcTermSeverityOutlcTreetermSeveritiesOutBtermSeveritiesErrB showTimeBshowTidBconsoleActionBcustomConsoleActionB productionBmapperB maybePrefixBprefixB$fToJSONLoggerConfig$fFromJSONLoggerConfig$fMonoidLoggerConfigInvalidRotation RollerHandler rhSeverities rhFormatter rhFileHandle rhWriteAction rhCloseAction rhFileNamelogIndexrotationFileHandler$fLogHandlerRollerHandler$fExceptionInvalidRotation$fShowInvalidRotation$fEqInvalidRotationLogger$fGenericLoggerrootLoggerNamelogMlogMCond getLogger getRootLogger setPrefix addHandler removeHandler setHandlers clearLevel setSeveritiessetSeveritiesMaybesaveGlobalLoggerupdateGlobalLoggerremoveAllHandlersretrieveLogContent$fGenericLogInternalStateCanLogdispatchMessage WithLoggerIO WithLoggerlogDebuglogInfo logNotice logWarninglogError logMessage liftLogIO $fCanLogRWST $fCanLogRWST0$fCanLogExceptT$fCanLogStateT$fCanLogStateT0$fCanLogReaderT$fCanLogLoggerNameBox $fCanLogIONamedPureLoggerrunNamedPureLogger PureLogger runPureLoggerLogEvent leLoggerName leSeverity leMessage runPureLogdispatchEvents logEvents launchPureLogrunNamedPureLoglaunchNamedPureLoglaunchNamedPureLogWithusingNamedPureLogger logPureAction$fMFunctorTYPEPureLogger$fCanLogPureLogger$fMFunctorTYPENamedPureLogger$fCanLogNamedPureLogger$fMonadTransNamedPureLogger$fShowLogEvent$fFunctorPureLogger$fApplicativePureLogger$fMonadPureLogger$fMonadTransPureLogger$fMonadStatePureLogger$fMonadThrowPureLogger$fHasLoggerNamePureLogger$fFunctorNamedPureLogger$fApplicativeNamedPureLogger$fMonadNamedPureLogger$fMonadStateNamedPureLogger$fMonadThrowNamedPureLogger$fHasLoggerNameNamedPureLogger logExceptioncatchLoginitTerminalLoggingparseLoggerConfigbuildAndSetupYamlLogginglaunchFromFile defaultConfiglaunchSimpleLogging MemoryQueue pushFront mqMemSizemqLimitSizednewMemoryQueuepopLasttoList_mqLimit _mqMemSize_mqQueuegetSizecontainers-0.5.10.2Data.Set.InternalSettable colorizercolorizerBuilder replaceVars-type-operators-0.1.0.4-7G7kotP3Np61j9E7ATYTllControl.Type.Operator$optionsfacilityidentity logsocketaddress sock_typecreateWriteFuncWrapperbaseGHC.IO.Handle.FDstdoutstderrghc-prim GHC.TypesTrueGHC.IO.Handle.TypesHandleGHC.MVarMVarlogInternalStatecomponentsOfNamehandleLogInternalState_lLevel _lHandlers_lNameHandlerTliTreeliPrefixControl.Monad.IO.ClassMonadIOIOtransformers-0.5.2.0 Control.Monad.Trans.State.StrictStateTGHC.BaseMonadFunctorpureGHC.IOFilePath HandlerFabric