Îõ³h&‚ú˜      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk l m n o p q r s tuvwxy z { | } ~  €  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž   ‘ ’ “ ” • – —  Safe-Inferred"%&?ãï² 34=56789:;<>? 34=56789:;<>? 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. @ABCD @ABCD Safe-Inferred"%&?ãïX]BlammoSet the number of  LoggerSet Buffers used by  fast-loggerBy default this matches getNumCapabilitiesø, which is more performant but does not guarantee message order. If this matters, such as in a CLI, set this value to 1.3Support for this option depends on your version of  fast-logger:fast-logger | Destination Supported?>=3.1.1 | anywhereyes>=3.0.5 | fileyes>=3.0.5 | stdout/stderrno<3.0.5 | anywhereno!@GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef!R@NOPQKLMGHIJSTUVWXYZ[\]^_`abcdef Safe-Inferred"%&?ãï%šBlammoHow to parse the valueBlammo*How to turn the parsed value into a setterghijghij  Safe-Inferred"%&?ãï§lBlammo-Non-visible decoration, such as color escapesBlammoRawklmnopklmonp Safe-Inferred"%&?ãïâ0/.-,+*)(tuvwxt0/.-,+*)(uvwx Safe-Inferred"%&?ãï-    Safe-Inferred"%&?ãïmyy Safe-Inferred"%&?ãïž›œžŸ ¡¢ Safe-Inferred"%&?ãïÞ   Safe-Inferred"%&?ãï ‡‡Blammo Create a |7 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 parse0/.-,+*)(z{|}~€‚ƒ„…†‡ˆ‰Š|z{ƒ„…†}~€‚‡0/.-,+*)(ˆ‰Š Safe-Inferred"%&?ãï ÿ6  !"#$%&'21GHIJKLMNOPQRWXYZ[\]z{|ƒŒ6RNOPQKLMGHIJWXYZ[\]|z{ƒŒ21 '&%$#"!   Safe-Inferred"%&?ãïÍŽBlammoÀAdd context to any logging done from the request-handling threadBlammoŽ, but have the ¤ availableBlammo8Log 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"%&?ãï¶–Blammo Construct a |% configured via environment variables—Blammo Construct a |0 configured via environment variables and use it8  !"#$%&'21GJHIKLMNQOPRWXYZ[\]z{|ƒŒ–—–—¦ !"#$%&$%'$%()*+)*,)*-)*.)*/)*0)*1)*2)*3)*4)*5)*678978:78;78<78=78>78?78@78A78B78C78D7EF7EG7EH7EI7EJ7EK7EL7EM7EM7EN7EOPPQRSTUVWXYZ[\]^_`abcdefghijklmn^opqrstuvwxyz{|}~_€‚ƒ„ … † ‡ ˆ ‰ Š ‹ Œ Ž‘’ “ ” • – — ˜ ™ š › œ  ž Ÿ   ¡ ’ ¢ £ ¤¥ ¦ § ¨ © ª « ¬ ­ ® ¯ °±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÁÂÄÅ%Blammo-1.1.1.2-2eubbkNXL8BHoTOfn6fZcXBlammo.LoggingData.Aeson.CompatSystem.Log.FastLogger.Compat$Blammo.Logging.LogSettings.LogLevelsBlammo.Logging.TestBlammo.Logging.ColorsBlammo.Logging.LogSettingsBlammo.Logging.LogSettings.Env Blammo.Logging.Terminal.LogPieceBlammo.Logging.TerminalBlammo.Logging.LoggerNetwork.Wai.Middleware.LoggingBlammo.Logging.Simple Paths_Blammo$aeson-2.1.2.1-1CP91TiqJNMKhmZsERtItUData.Aeson.Types.ToJSON.=Data.Aeson.Encoding.InternalSeriesData.Aeson.Types.InternalPairData.Aeson.KeyMaptoListfromList singletonnullemptyKeyMapData.Aeson.KeytoTextfromTextKeyexceptions-0.10.4Control.Monad.Catch MonadMask(fast-logger-3.2.1-AvDDAyRsMQsCT9DaHC2zvOSystem.Log.FastLogger.LoggerSetnewStderrLoggerSetNnewStdoutLoggerSetNnewFileLoggerSetN*monad-logger-0.3.39-1lOpXggxnNg7eU0fbDLfrDControl.Monad.Logger LevelOther LevelError LevelWarn LevelInfo LevelDebugLogLevel LogSourcemonadLoggerLog MonadLogger askLoggerIO MonadLoggerIOLoggingT1monad-logger-aeson-0.4.0.4-30RU6n7Us1J9PGBbE9seFFControl.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 readLogColordefaultLogSettingssetLogSettingsLevelssetLogSettingsDestinationsetLogSettingsFormatsetLogSettingsColorsetLogSettingsBreakpointsetLogSettingsConcurrencygetLogSettingsLevelsgetLogSettingsDestinationgetLogSettingsFormatgetLogSettingsColorgetLogSettingsBreakpointgetLogSettingsConcurrencyshouldColorAutoshouldColorHandleparseparser parseWith parserWithLogPiecelogPiecerender bytestring visibleLengthoffset$fIsStringLogPiece$fMonoidLogPiece$fSemigroupLogPieceLoggedMessagesnewLoggedMessages appendLogStrappendLogStrLngetLoggedMessagesreformatTerminal HasLoggerloggerLLoggergetLoggerLogSettingsgetLoggerReformatgetLoggerShouldLoggetLoggerShouldColor pushLogStrLn flushLogStr newLogger flushLogger pushLogger pushLoggerLn newTestLoggergetLoggedMessagesLenientgetLoggedMessagesUnsafe$fHasLoggerLoggerrunLoggerLoggingTConfigaddThreadContextaddThreadContextFromRequest requestLogger defaultConfigsetConfigLogSourcesetConfigGetClientIpsetConfigGetDestinationIprequestLoggerWith newLoggerEnvrunSimpleLoggingTlgteghc-prim GHC.Classes>=endoversiongetDataFileName getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDir'unliftio-0.2.24.0-LQ0PykdUzi0K9IfLZa7VlUnliftIO.Exception throwString wai-3.2.3-3PVD6I6JagyLEiGr73UqALNetwork.Wai.InternalRequest remoteHost