śĪvėp’\      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN O P Q R S T U V W X Y Z [ None!"9:;<=DIORT[  Represents message to be logged.Component of an application.Aplication log domain. Time of the logged event.  Log level. Message to be logged. ,Additional data associated with the message. Available log levels. Render a  to Text. +The time that message was added to the log.The actual message.     None!"9:;<=DIORT[ DAn object used for communication with a logger thread that outputs Us using e.g. PostgreSQL, Elasticsearch or stdout (depending on the back-end chosen).\ Output a .]mWait for the logger to output all messages in its input queue (in the case logging is done asynchronously).^fKill the logger thread. Subsequent attempts to write messages to the logger will raise an exception.Execute logger to serialize a .Wait until all /s stored in the internal queue are serialized. 0Shutdown the logger thread associated with this 9 object. Subsequent attempts to write messages via this  will result in an exception._`-like execution of an a: action, verifying all messages are properly logged. See  mkBulkLogger.bComposition of  objects. c\]^ _bd c\]^ _c\]^ _bdNone!"9:;<=DIORT[eA simple STM based queue.!AStart a logger thread that consumes one queued message at a time."ÅStart an asynchronous logger thread that consumes all queued messages once per second. To make sure that the messages get written out in the presence of exceptions, use high-level wrappers like _,   or  $ instead of this function directly.’’Note: some messages can be lost when the main thread shuts down without making sure that all logger threads have written out all messages, because in that case child threads are not given a chance to clean up by the RTS. This is apparently a feature: Ihttps://mail.haskell.org/pipermail/haskell-cafe/2014-February/112754.htmltTo work around this issue, make sure that the main thread doesn't exit until all its children have terminated. The async package makes this easy.Problematic example: Fimport Control.Concurrent.Async main :: IO () main = do logger <-   a <-  (  $ \logger ->  "main" logger $  "foo") -- Main thread exits without waiting for the child -- to finish and without giving the child a chance -- to do proper cleanup. Fixed example: Fimport Control.Concurrent.Async main :: IO () main = do logger <-   a <-  (  $ \logger ->  "main" logger $  "foo") ­ a -- Main thread waits for the child to finish, giving -- it a chance to shut down properly. This works even -- in the presence of exceptions in the child thread. fCreate an instance of e.g Check if an e is empty.h!Read all the values stored in an e.iWrite a value to an e. ej!"fghik !"!" ej!"fghikNone!"9:;<=DIORT[ #ARepresents the family of monads with logging capabilities. Each #d carries with it some associated state (the logging environment) that can be modified locally with % and &.$Write a message to the log.%DExtend the additional data associated with each log message locally.&.Extend the current application domain locally.'TLog a message and its associated data using current time as the event time and the  log level.(TLog a message and its associated data using current time as the event time and the  log level.)TLog a message and its associated data using current time as the event time and the  log level.*Like '-, but without any additional associated data.+Like (-, but without any additional associated data.,Like )-, but without any additional associated data.lyWrite a log message using the given log level, message text and additional data. Current time is used as the event time.-Generic, overlapping instance. #$%&m'()*+,l- #$%&'()*+, #$%&'()*+, #$%&m'()*+,l-None!"9:;<=DIORT[.IMonad transformer that adds logging capabilities to the underlying monad.2The state that every . carries around.4The  to use.5Current application component.6Current application domain.7:Additional data to be merged with the log message's data.8Run a . computation.3Note that in the case of asynchronous/bulk loggers 8] doesn't guarantee that all messages are actually written to the log once it finishes. Use  withPGLogger or withElasticSearchLogger for that.9#Transform the computation inside a .../012345678"Application component name to use.The logging back-end to use.The . computation to run.9:;< ./0123456789 2345671./089./0123456789:;<None!"9:;<=DIORT[HˆCreate an in-memory logger for the duration of the given action, returning both the result of the action and the logger's output as a Text value afterwards.HHHHNone!"9:;<=DIORT[I Create a JŒ for the duration of the given action, and shut it down afterwards, making sure that all buffered messages are actually written to stdout.JMStart an asynchronous logger thread that prints messages to standard output. Please use withBulkStdOutLogger'B instead, which is more exception-safe (see the note attached to ").IJIJIJIJNone!"9:;<=DIORT[K Create a simpleStdoutloggerV for the duration of the given action, making sure that stdout is flushed afterwards.LCSimple, synchronous logger that prints messages to standard output.M8Create a logger that prints messages to standard output.KLMKLMLMKKLM None!"9:;<=DIORT[N Create a OŒ for the duration of the given action, and shut it down afterwards, making sure that all buffered messages are actually written to the DB.OZStart an asynchronous logger thread that inserts log messages into a PostgreSQL database. Please use  withPgloggerB instead, which is more exception-safe (see the note attached to ").noNONOONnoNONone!"9:;<=DIORT[0  !"#$%&'()*+,./0123456789 None!"9:;<=DIORT[Q$Configuration for the Elasticsearch . See  Mhttps://www.elastic.co/guide/en/elasticsearch/reference/current/glossary.html for the explanation of terms.SElasticsearch server address.TElasticsearch index name.UElasticsearch mapping name.VSensible defaults for Q.W Create an X for the duration of the given action, and shut it down afterwards, making sure that all buffered messages are actually written to the Elasticsearch store.XNStart an asynchronous logger thread that stores messages using Elasticsearch. Please use WB instead, which is more exception-safe (see the note attached to "). pqQRSTUVWXConfiguration.7Generate a random 32-bit word for use in document IDs.rsYQRSTUVWXQRSTUVWXpqQRSTUVWXrsYt  !"#$%&'()*+,-./0123456 7 8 9 :;<=>?@ABCDEFGGHIJJKLMNOPQRSTUVWXYZ[\]^ _`ab c d e f f g h i j  k l m n o p qrstuvw x 7 yz{|}~z€ ‚ ƒ „ „ … †‡log-0.6-8wrwY9SfJU1B1iwmBoHojH Log.ClassLogLog.Data Log.Logger Log.MonadLog.Backend.TextLog.Backend.StandardOutput.BulkLog.Backend.StandardOutputLog.Backend.PostgreSQLLog.Backend.ElasticSearchLog.Internal.LoggerwithElasticSearchLoggerwithBulkStdOutLoggerelasticSearchLoggerControl.Concurrent.AsyncasyncrunLogT logTrace_wait time-1.6.0.1Data.Time.Clock.UTCUTCTime%aeson-0.11.2.1-B4zJgvAhVvJC40pFgLElOfData.Aeson.Types.Class.=Data.Aeson.Types.Internalobject%monad-time-0.2-9cIVNcUhguo9DmiCGCqoYwControl.Monad.Time currentTime MonadTime LogMessage lmComponentlmDomainlmTimelmLevel lmMessagelmDataLogLevel LogAttentionLogInfoLogTrace readLogLevel showLogLevelshowLogMessage$fNFDataLogMessage$fToJSONLogMessage$fNFDataLogLevel$fBoundedLogLevel $fEqLogLevel $fOrdLogLevel$fShowLogLevel$fEqLogMessage$fShowLogMessageLogger execLogger waitForLoggershutdownLoggermkLogger mkBulkLoggerMonadLog logMessage localData localDomain logAttentionlogInfologTrace logAttention_logInfo_ $fMonadLogtLogTunLogT InnerLogT LoggerEnvleLogger leComponentleDomainleDatamapLogT$fMonadLogLogT$fMonadBaseControlbLogT$fMonadTransControlLogT$fAlternativeLogT$fApplicativeLogT $fFunctorLogT $fMonadLogT$fMonadBaseLogT$fMonadCatchLogT $fMonadIOLogT$fMonadMaskLogT$fMonadPlusLogT$fMonadThrowLogT$fMonadTransLogTwithSimpleTextLoggerbulkStdoutLoggerwithSimpleStdOutLoggersimpleStdoutLogger stdoutLogger withPgLoggerpgLogger$$fEnumInvalidEncodingRecoveryAttemptElasticSearchConfigesServeresIndex esMappingdefaultElasticSearchConfig$fToJSONLogsMapping$fEqElasticSearchConfig$fShowElasticSearchConfigloggerWriteMessageloggerWaitForWriteloggerShutdown withLoggerbaseControl.Exception.Basebracketghc-prim GHC.TypesIO$fMonoidLogger$fSemigroupLoggerSQueue newSQueueIO isEmptySQueue readSQueue writeSQueue mkLoggerImpllogNowcontrolTInvalidEncodingRecoveryAttemptAttempt LogsMappinglittleEndianRep decodeReply