úÎbœ\°3      !"#$%&'()*+,-./012 Trustworthy 6 is the type of a full format. It is simply a list of s A  is a formatting element 3A 4able formatting element 5¶finaliseFormat finalises a format that represents datetime elements as a UNIX datetime format string and turns them into a formatting closure. This method also concatenates adjacent s 67formatParser parses a format string into FormatElemTHs 7(elemParser parses a single FormatElemTH 8)datetimeParser parses a datetime element $( _) :: a is a template function that parses the passed in format string, then finalises it and returns a . 9l$(mat _) :: FormatTH is a template function that parses the passed in format string and returns a FormatTH. :3;<=>?56789@ :3?>=<;56789@ Trustworthy0A,An internal datatype used when initialising Qs. It includes all information that the user passed in with the list of loggers. BwAn internal datatype used for aggregation of filters as well as keeping track of synchronous and asynchronous logging. ˜ This means for example that it is possible to log from two threads into the same file, one synchronously, one asynchronously, using different filters. A  is returned when an  ! is run. You may wait on it with .. ,This is a simple monad for the bottom of one's monad stack. (The SLogT monad transformer is simply a C with an environment DThe environment of   EThe current thread's name F>The list of internal loggers together with associated filters GSame as the user-specified   HThe  of logging IDThe internal representation of Loggers with open handles, locks and Js.   is the configuration of   FSpecifies whether ANSI colouring should be used when logging to stdout/stderr 9The list of loggers together with the associated filters T is a log message together with the severity, time of logging and the logging thread's name. ! is the type of logging filters. s may only depend on the  . The 2 type specifies the types of sinks we can log to.  logs to a specified J.  Note that Ys are written instead of the final formatted text. If you wish to use the final text use 1.  logs to the stderr  logs to the stdout # specifies a file to be logged in. 1 Note that symbolic links will be resolved using K when deciding whether two s point to the same file. S is a type to specify whether a logger should log synchronously or asynchronously. y Syncronous logging means that the logging thread will block until the message has been written and flushed to the sink. ¬ Asynchronous logging means that the logging thread will write to a work queue and move on. The work queue will be read by a dedicated thread that is forked for each sink. -The class of monads that can perform logging  logs the specified L with the specified   2The type of severities with increasing importance &+The default log format, which currently is  $(format "%d(%F %T) | %s | [%t] %m"). See System.Log.SLog.Format% for more details on format strings. 'Log a % message (Log a # message )Log an $ message *Log a " message +Log an ! message MSGR code for severity colours N/Wrap a piece of text in some SGR configuration ,, allows all lines to be logged. --# is the default log configuration. s It writes all non-DEBUG messages to the stdout synchronously and all messages to a specified file asynchronously. ..¥ will only return when all resources have been released and all streams have been flushed. Note that this includes resources allocated by the user using the exposed O instance. }All threads internally accounted for are signaled to exit (they will first finish processing of all remaining jobs) when the   is run, however it is the user'2s responsibility to shut down threads forked with 2 or P before . can return. // runs an   given a  ,  and the current thread's name.  It returns a ! besides the usual return value. 00V uses the default configuration with the specified log file name. It also waits using .) until all resources have been released. Q+initLoggers initialises the user specified 3s and returns the internal representation of them. $This includes first aggregating the ?s resolving any ambiguities, then opening the logging streams. RJcanonExist makes sure the specified file exists by creating it if it doesn'"t, then returns canonicalizePath. S forkCleanupc forks a ResIO thread that will get an exit signal through a TVar when the outer ResourceT is run. + The forked off ResourceT is the inner one TAThis method aggregates the specified loggers in a meaningful way A Ambiguous cases arise when several loggers specify the same file/stream : * First off we use canonicalizePath to resolve symlinks < * Second, we create a disjunction of the attached filters @ * Lastly we keep track of synchrony: if there are two loggers E specifying the same file, one synchronous the other asynchronous D then we keep both filters and will use the a lock in each case. U*asyncLogger is the thread forked for each  logger. 7 It may be passed a lock to use when logging in case a 0hronous logger for the same handle also exists. V=Helper method for choosing coloured vs. non-coloured strings W$logger performs the actual logging. 11 formats the given  using the specified . The Xean determines whether 1) should insert ANSI colour codes or not. 22 forks an  ( thread with the specified thread name. Y&helper method for padding with spaces WAZ[\]^B_`ab cdDeEFGHIfgh  !"#$%&'()*+MN,-./0QRSTUVW12Yijklmnopqrs3  !"#$%&'()*+,-./012+ /0.')(*+ %$#"!, -&210AZ[\]^Ba`_b cdDeEFGHIhgf   %$#"!&'()*+MN,-./0QRSTUVW12Yijklmnopqrst      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXEFYZ[\]^_`abcdefgChijklmn  oHpqrstuvwxyz{|}~SimpleLog-0.1.0.1System.Log.SLog.FormatSystem.Log.SLogFormat FormatElem ThreadElem DateTimeElem StringElem SeverityElem MessageElemformatFlushKeySLogSLogT LogConfig ansiColoursloggersLogLine logSeverity logMessage logTimestamp logThreadFilterLogger TChanLogger StderrLogger StdoutLogger FileLoggerSyncAsync MonadSLoglogSeverityERRORWARNINGSUCCESSINFODEBUGdefaultLogFormatlogDlogSlogIlogWlogEanySevdefaultLogConfig waitFlushrunSLogT simpleLog formatLineforkSLog FormatElemTHtemplate-haskellLanguage.Haskell.TH.SyntaxLiftfinaliseFormat formatParser elemParserdatetimeParsermatFormatTH ThreadElemTHDateTimeElemTH StringElemTHSeverityElemTH MessageElemTH $fLiftText InitState InitLoggerresourcet-0.4.8%Control.Monad.Trans.Resource.Internal ResourceTSLogEnv threadNameloggerInternals logColours logFormatLoggerInternal stm-2.4.2Control.Concurrent.STM.TChanTChandirectory-1.2.0.1System.DirectorycanonicalizePath text-0.11.2.3Data.Text.InternalTextsgrwithSgr MonadResourceForkableT-0.1.0.0Control.Concurrent.ForkableTfork initLoggers canonExist forkCleanUpaggregateLoggers asyncLoggerchsloggerghc-prim GHC.TypesBoolpadS fileInitMap stdoutInit stderrInit tchanInitBoth InitAsyncInitSyncunSLogTTChanLoggerInternalAsyncLoggerInternalSyncLoggerInternal$fMonadSLogSLogT$fForkableSLogTSLogT$fSemigroupInitLogger$fMonadTransSLogT$fMonadBaseControlIOSLogT$fMonadTransControlSLogT$fMonadSLogResourceT$fMonadSLogContT$fMonadSLogErrorT$fMonadSLogReaderT$fMonadSLogStateT