Îõ³h&¥\Ž      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs t u v w x y z { | } ~  €  ‚ƒ „ … † ‡ ˆ ‰ Š ‹ Œ   Safe-Inferred"%&?ãï€ 01:23456789;< 01:23456789;< Safe-Inferred"%&?ãïÜŽBlammoLike  , but treats   "trace" as below  Normally,  3 is the highest level, but it's common to use the trace level as more verbose than debug2. With this comparison in use, we can safely use   "trace" for that.  =>?@A = >?@A Safe-Inferred"%&?ãï =DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aO=KLMNHIJDEFGPQRSTUVWXYZ[\]^_`a Safe-Inferred"%&?ãïéBlammoHow to parse the valueBlammo*How to turn the parsed value into a setterbcdebcde Safe-Inferred"%&?ãïkgBlammo-Non-visible decoration, such as color escapesBlammoRawfghijkfghjik Safe-Inferred"%&?ãï¦ -,+*)('&%opqr o-,+*)('&%pqr Safe-Inferred"%&?ãïï    Safe-Inferred"%&?ãï/ss  Safe-Inferred"%&?ãïÎ}Blammo Create a v7 that will capture log messages instead of logging themSee Blammo.Logging.LoggedMessages for more details.~BlammoReturn the logged messages if } was used#If not, the empty list is returned.Blammo~+ but ignore any messages that fail to parse€Blammo~ but ‘ if any messages failed to parse-,+*)('&%tuvwxyz{|}~€vtu{|wxyz}-,+*)('&%~€ Safe-Inferred"%&?ãï*4   !"#$/.DEFGHIJKLMNOTUVWXtuv{‚4O KLMNHIJDEFGTUVWXvtu{‚/. $#"!   Safe-Inferred"%&?ãï YƒBlammo Construct a v% configured via environment variables„Blammo Construct a v0 configured via environment variables and use it6   !"#$/.DGEFHIJKNLMOTUVWXtuv{‚ƒ„ƒ„  Safe-Inferred"%&?ãïô†BlammoÀAdd context to any logging done from the request-handling thread‡Blammo†, but have the ’ availableˆBlammo8Log requests (more accurately, responses) as they happen*In JSON format, logged messages look like: ${ ... message: { text: "GET foo*bar => 200 OK", meta: { method: GET, path: "fooÜbar", query: "?baz=bat&quix=quo", status: { code: 200, message: OK÷ }, durationMs: 1322.2, requestHeaders: { Authorization: "***", Accept: "text/html", Cookie: "***" }, responseHeaders: { Set-Cookie: "***", Expires: "never" } } } } ŠBlammo'Change the source used for log messages Default is  requestLogger.‹BlammoChange how the clientIp field is determined)Default is looking up the first value in x-forwarded-for , then the  x-real-ip& header, then finally falling back to “.ŒBlammoChange how the  destinationIp field is determinedDefault is looking up the  x-real-ip header.NOTE2: Our default uses a somewhat loose definition of  destinationÆ. It would be more accurate to report the resolved IP address of the Host; header, but we don't have that available. Our default of  x-real-ip¹ favors containerized Warp on AWS/ECS, where this value holds the ECS target container's IP address. This is valuable debugging information and could, if you squint, be considered a  destination. …†‡ˆ‰Š‹Œ †‡ˆ…‰Š‹Œ  Safe-Inferred"%&?ãïG”•–—˜™š›œ !"#$%#$&#$'#$(#$)#$*#$+#$,#$-#$.#$/#$012312412512612712812912:12;12<12=12>1?@1?A1?B1?C1?D1?E1?F1?G1?G1?H1?IJJKLMNOPQRSTUVWXYZ[\]^_`abcdefghXijklmnopqrstuvYwxyz{|}~€‚ƒ„…†‡ˆ‰ Š ‹ Œ  Ž   ‘ ’ “ ” ‰ • – —˜ ™ š › œ  ž Ÿ   ¡ ¢ £¤¥¦§¨©ª«¬­®¬­¯ ° ± ² ³ ´ µ ¶ ·¸%Blammo-1.1.1.0-IhFbvgAhQ6f92yKYOW6FXkBlammo.LoggingData.Aeson.Compat$Blammo.Logging.LogSettings.LogLevelsBlammo.Logging.TestBlammo.Logging.ColorsBlammo.Logging.LogSettingsBlammo.Logging.LogSettings.Env Blammo.Logging.Terminal.LogPieceBlammo.Logging.TerminalBlammo.Logging.LoggerBlammo.Logging.SimpleNetwork.Wai.Middleware.Logging Paths_Blammo#aeson-2.1.1.0-3oVJQ6k21EwIYMuCcSPLyData.Aeson.Types.ToJSON.=Data.Aeson.Encoding.InternalSeriesData.Aeson.Types.InternalPairData.Aeson.KeyMaptoListfromList singletonnullemptyKeyMapData.Aeson.KeytoTextfromTextKeyexceptions-0.10.4Control.Monad.Catch MonadMask)monad-logger-0.3.37-MaWqrKbrAKERlay37pAQgControl.Monad.Logger LevelOther LevelError LevelWarn LevelInfo LevelDebugLogLevel LogSourcemonadLoggerLog MonadLogger askLoggerIO MonadLoggerIOLoggingT1monad-logger-aeson-0.4.0.2-25JH8oDy9wgICt6BNarEiFControl.Monad.Logger.AesonmyThreadContextwithThreadContext logOtherNS logErrorNS logWarnNS logInfoNS logDebugNSlogOtherlogErrorlogWarnlogInfologDebug#Control.Monad.Logger.Aeson.InternalloggedMessageMetaloggedMessageTextloggedMessageThreadContextloggedMessageLogSourceloggedMessageLocloggedMessageLevelloggedMessageTimestamp LoggedMessage:#MessageColorsgrayblackcyanmagentablueyellowgreenredbolddim getColors LogLevels newLogLevels readLogLevelsshouldLogLeveldefaultLogLevels $fEqLogLevels$fShowLogLevelsLogColor LogColorAutoLogColorAlways LogColorNever LogFormat LogFormatJSONLogFormatTerminalLogDestinationLogDestinationStdoutLogDestinationStderrLogDestinationFile LogSettingsreadLogDestination readLogFormat readLogColordefaultLogSettingssetLogSettingsLevelssetLogSettingsDestinationsetLogSettingsFormatsetLogSettingsColorsetLogSettingsBreakpointgetLogSettingsLevelsgetLogSettingsDestinationgetLogSettingsFormatgetLogSettingsColorgetLogSettingsBreakpointshouldColorAutoshouldColorHandleparseparser parseWith parserWithLogPiecelogPiecerender bytestring visibleLengthoffset$fIsStringLogPiece$fMonoidLogPiece$fSemigroupLogPieceLoggedMessagesnewLoggedMessages appendLogStrgetLoggedMessagesreformatTerminal HasLoggerloggerLLoggergetLoggerReformatgetLoggerShouldLog pushLogStrLn flushLogStr newLogger flushLogger newTestLoggergetLoggedMessagesLenientgetLoggedMessagesUnsafe$fHasLoggerLoggerrunLoggerLoggingT newLoggerEnvrunSimpleLoggingTConfigaddThreadContextaddThreadContextFromRequest requestLogger defaultConfigsetConfigLogSourcesetConfigGetClientIpsetConfigGetDestinationIprequestLoggerWithlgteghc-prim GHC.Classes>=endo(unliftio-0.2.23.0-8Xz3hC2ra6eGMVihZEzUzTUnliftIO.Exception throwString wai-3.2.3-GJ93JXcVtKMJ4Od8PN5oi0Network.Wai.InternalRequest remoteHostversiongetDataFileName getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDir