h&-"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR  TrustworthySTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred  Safe  fast-logger!Types that can be converted to a   . Instances for types from the text library use a UTF-8 encoding. Instances for numerical types use a decimal encoding.  fast-loggerLog message builder. Use () to append two LogStr in O(1). fast-loggerObtaining the length of  . fast-logger Converting   to . fast-logger fast-logger fast-logger fast-logger fast-logger fast-logger fast-logger fast-logger fast-logger fast-logger fast-logger fast-logger fast-logger   Safe_ fast-logger&The type for buffer size of each core. fast-logger&The default buffer size (4,096 bytes). Safe-Inferred fast-logger/Type aliaes for date format and formatted date.Safe  fast-loggerThe spec for time based rotation. It supports post processing of log files. Does not delete any logs. Example: timeRotate fname = LogFileTimedRotate (TimedFileLogSpec fname timeFormat sametime compressFile) defaultBufSize where timeFormat = "%FT%H%M%S" sametime = (==) on C8.takeWhile (/=T) compressFile fp = void . forkIO $ callProcess "tar" [ "--remove-files", "-caf", fp <> ".gz", fp ]  fast-loggerbase file path fast-loggertime format to prepend fast-loggerfunction that compares two formatted times as specified by timed_timefmt and decides if a new rotation is supposed to begin fast-loggerprocessing function called asynchronously after a file is added to the rotation fast-loggerThe spec for logging files" fast-logger7Max log file size (in bytes) before requiring rotation.# fast-loggerMax number of rotated log files to keep around before overwriting the oldest one.$ fast-logger&Checking if a log file can be written.% fast-loggerRotating log files.& fast-logger$Prefix file name with formatted time !"#$%& !"#$%& Safe-Inferred" fast-loggerGet date using UnixTime. fast-loggerFormat unix EpochTime date.' fast-loggerMake  action which get cached formatted local time. Use this to avoid the cost of frequently time formatting by caching an auto updating formatted time, this cache update every 1 second. more detail in Control.AutoUpdate( fast-logger!A simple time cache using format "%d%b %Y:%T %z") fast-logger!A simple time cache using format  "%d-%b-%Y %T"'()'()  Safe-Inferred%&* fast-loggerA class for internal loggers.. fast-logger Writting  1 using a buffer in blocking mode. The size of  3 must be smaller or equal to the size of buffer./ fast-logger Writting   using a temporary buffer.*+,-./  Safe-Inferred%&y0 fast-logger$A non-scale but time-ordered logger.1 fast-logger Creating 0.01  Safe-Inferred%&?2 fast-logger$A scale but non-time-ordered logger.3 fast-logger Creating 2?. The first argument is the number of the internal builders.23 Safe-Inferred"%&4 fast-loggerA set of loggers. The number of loggers is the capabilities of GHC RTS. You can specify it with "+RTS -N". A buffer is prepared for each capability.5 fast-loggerCreating a new 4 using a file.Uses numCapabilties many buffers, which will result in log output that is not ordered by time (see 6).6 fast-loggerCreating a new 4: using a file, using only the given number of capabilites.Giving  mn = Just 1 scales less well on multi-core machines, but provides time-ordered output.7 fast-loggerCreating a new 4 using stdout.8 fast-loggerCreating a new 46 using stdout, with the given number of buffers (see 6).9 fast-loggerCreating a new 4 using stderr.: fast-loggerCreating a new 46 using stderr, with the given number of buffers (see 6).; fast-loggerCreating a new 4. If  is specified to the second argument, stdout is used. Please note that the minimum  is 1.< fast-loggerCreating a new 4 using a FD.= fast-loggerWriting a log message to the corresponding buffer. If the buffer becomes full, the log messages in the buffer are written to its corresponding file, stdout, or stderr.> fast-loggerSame as = but also appends a newline.? fast-loggerFlushing log messages in buffers. This function must be called explicitly when the program is being terminated.Note: Since version 2.1.6, this function does not need to be explicitly called, as every push includes an auto-debounced flush courtesy of the auto-update package. Since version 2.2.2, this function can be used to force flushing outside of the debounced flush calls.@ fast-logger*Renewing the internal file information in 4-. This does nothing for stdout and stderr.A fast-loggerFlushing the buffers, closing the internal file information and freeing the buffers.B fast-loggerReplacing the file path in 4 and returning a new 4 and the old file path.456789:;<=>?@AB456789:;<@A=>?B Safe-Inferred")*!C fast-logger Logger Type.L fast-loggerL pass  to callback and simply log its result. this can be used to customize how to log timestamp.-Usually, one would write a wrapper on top of L, for example: {-# LANGUAGE OverloadedStrings #-} log :: TimedFastLogger -> LogStr -> IO () log logger msg = logger (\time -> toLogStr (show time) <> " " <> msg <> "\n")M fast-loggerM simply log logStr.N fast-logger Initialize a M without attaching timestamp a tuple of logger and clean up action are returned. This type signature should be read as: 2newFastLogger :: LogType -> IO (FastLogger, IO ())This logger uses numCapabilities many buffers, and thus does not provide time-ordered output. For time-ordered output, use O.O fast-loggerLike N, but creating a logger that uses only 1 internal builder. This scales less on multi-core machines and consumes more memory because of an internal queue but provides time-ordered output.P fast-logger version of NQ fast-logger Initialize a M with timestamp attached to each message. a tuple of logger and clean up action are returned.R fast-logger version of newTimeFastLoggerD fast-logger No logging.E fast-loggerLogging to stdout. ) is a buffer size for each capability.F fast-loggerLogging to stderr. ) is a buffer size for each capability.G fast-loggerLogging to a file. ) is a buffer size for each capability.H fast-loggerLogging to a file.  is a buffer size for each capability. File rotation is done on-demand.I fast-loggerLogging to a file.  is a buffer size for each capability. Rotation happens based on check specified in .J fast-loggerLogging with a log and flush action. run flush after log each message.Q fast-loggerHow do we get ? System.Log.FastLogger.Date provide cached formatted time.9 #" !$%&'()456789:;<=>?@ABCDEFGHIJKLMNOPQRMKCDEFGHIJNOPLQR  Safe-Inferred";0 *-+,./0123456789:;<=>?@AB!   0123./*+,-     ! " # $ % & '()**+,-.//012345678 9 : ; < = > ? @ A BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdcefghijkjljmjnjojpjqjrjsjtjujvjwjxjyjzj{j|j}j~jjjggggggggggggggjjjccccccccccccccccccccccccccccccc             (fast-logger-3.2.2-BaWkm4LkaPH3f9zoBy2JGVSystem.Log.FastLogger.InternalSystem.Log.FastLoggerSystem.Log.FastLogger.TypesSystem.Log.FastLogger.FileSystem.Log.FastLogger.DateSystem.Log.FastLogger.LoggerSetSystem.Log.FastLogger.ImportsSystem.Log.FastLogger.FileIOSystem.Log.FastLogger.LogStrSystem.Log.FastLogger.IOSystem.Log.FastLogger.Write"System.Log.FastLogger.SingleLogger!System.Log.FastLogger.MultiLoggerbaseGHC.Base<>memptybytestring-0.11.3.1 Data.ByteString.Builder.InternalBuilderFDcloseFD openFileFD getStderrFD getStdoutFDwriteRawBufferPtr2FD invalidFD isFDValidToLogStrtoLogStrLogStr logStrLength fromLogStrBufSizeBufferdefaultBufSize getBuffer freeBuffer toBufIOWith TimeFormat FormattedTimeTimedFileLogSpectimed_log_file timed_timefmttimed_same_timeframetimed_post_process FileLogSpeclog_file log_file_sizelog_backup_numbercheckrotate prefixTime newTimeCachesimpleTimeFormatsimpleTimeFormat'Loggers stopLoggerspushLog flushAllLog writeLogStrwriteBigLogStr SingleLoggernewSingleLogger MultiLoggernewMultiLogger LoggerSetnewFileLoggerSetnewFileLoggerSetNnewStdoutLoggerSetnewStdoutLoggerSetNnewStderrLoggerSetnewStderrLoggerSetN newLoggerSetnewFDLoggerSet pushLogStr pushLogStrLn flushLogStrrenewLoggerSet rmLoggerSetreplaceLoggerSetLogType'LogNone LogStdout LogStderrLogFileNoRotateLogFileLogFileTimedRotate LogCallbackLogTypeTimedFastLogger FastLogger newFastLoggernewFastLogger1withFastLoggernewTimedFastLoggerwithTimedFastLogger++GHC.Listfilterzipmap Control.Monadguardjoin GHC.FloatFloatingtanhtansqrtsinhsinpilogBaselog1pexplog1plog1mexplogexpm1expcoshcosatanhatanasinhasinacosh**acosMonad>>>>=returnFunctor<$fmapghc-prim GHC.ClassesOrd<<=>maxmincompare>=Control.Monad.Fail MonadFailfail ApplicativeliftA2<**><*>pure Data.Foldablesumproductminimummaximumfoldr1foldl1foldl'elemfoldrfoldlnulllengthData.TraversablemapMsequenceMonoidmconcatmappend GHC.TypesIntGHC.IntInt8Int16Int32Int64 GHC.MaybeMaybeNothingJustOrderingGTLTEQWordGHC.WordWord8Word16Word32Word64 GHC.IORefatomicModifyIORef' zipWithM_zipWithMunless replicateM_ replicateMmfilter mapAndUnzipMforeverfoldM_foldMfilterM>=><=<<$!> Data.ListisSubsequenceOf mapAccumR mapAccumLforMControl.ApplicativeZipList getZipList WrappedMonad WrapMonad unwrapMonad WrappedArrow WrapArrow unwrapArrowoptional Data.IORef modifyIORef' modifyIORef mkWeakIORefatomicWriteIORefatomicModifyIORefIORef writeIORef readIORefnewIORefData.Functor.ConstConstgetConst sequence_ornotElemmsum minimumBy maximumBymapM_forM_find concatMapconcatasumanyandall Data.OldListzipWith7zipWith6zipWith5zipWith4zip7zip6zip5zip4wordsunzip7unzip6unzip5unzip4unwordsunlinesunionByunionunfoldr transposetails subsequences stripPrefixsortOnsortBysort singleton permutations partitionnubBynublines isSuffixOf isPrefixOf isInfixOf intersperse intersectBy intersect intercalateinsertByinsertinitsgroupBygroup genericTakegenericSplitAtgenericReplicate genericLength genericIndex genericDrop findIndices findIndex elemIndices elemIndex dropWhileEnddeleteFirstsBydeleteBydelete\\ Data.MonoidLastgetLastFirstgetFirstApgetApData.Semigroup.InternalSumgetSumProduct getProductEndoappEndoDualgetDualAnygetAnyAltgetAltAllgetAllData.OrdDowngetDown comparingclampNumericshowOct showIntAtBaseshowIntshowHex showHFloat showGFloatAlt showGFloat showFFloatAlt showFFloat showEFloatshowBin readSignedreadOctreadIntreadHex readFloatreadDecreadBinGHC.Read lexDigits showFloatfromRat floatToDigits byteSwap64 byteSwap32 byteSwap16 bitReverse8 bitReverse64 bitReverse32 bitReverse16GHC.Real showSignedzipWith3zipWithzip3unzip3unzipuncons takeWhiletaketailsplitAtspanscanr1scanrscanl1scanl'scanlreverse replicaterepeatlookuplastiterate'iterateinitheadfoldl1' dropWhiledropcyclebreak!! Data.Maybe maybeToListmaybemapMaybe listToMaybe isNothingisJust fromMaybefromJust catMaybes Data.Functorvoid<$> MonadPlusmplusmzero Alternativesomemany<|>emptywhenliftM5liftM4liftM3liftM2liftMliftA3liftAap=<<<**>Data.ByteString.Internal ByteStringBSPS$fToLogStrDouble$fToLogStrFloat$fToLogStrInteger$fToLogStrWord64$fToLogStrWord32$fToLogStrWord16$fToLogStrWord8$fToLogStrWord$fToLogStrInt64$fToLogStrInt32$fToLogStrInt16$fToLogStrInt8 $fToLogStrIntgetTime formatDateIOControl.Exception.Basebracket