Îõ³h&‘™      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl m n o p q r s t uvwxyz { | } ~  €  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž   ‘ ’ “ ” • – — ˜  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. @ABCDE @ABCDE Safe-Inferred"%&?ãï_^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!@HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg!S@OPQRLMNHIJKTUVWXYZ[\]^_`abcdefg Safe-Inferred"%&?ãï,›BlammoHow to parse the valueBlammo*How to turn the parsed value into a setterhijkhijk  Safe-Inferred"%&?ãï®mBlammo-Non-visible decoration, such as color escapesBlammoRawlmnopqlmnpoq Safe-Inferred"%&?ãïé0/.-,+*)(uvwxyu0/.-,+*)(vwxy Safe-Inferred"%&?ãï4    Safe-Inferred"%&?ãïtzz 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/.-,+*)({|}~€‚ƒ„…†‡ˆ‰Š‹}{|„…†‡~€‚ƒˆ0/.-,+*)(‰Š‹ Safe-Inferred"%&?ãï 6  !"#$%&'21HIJKLMNOPQRSXYZ[\]^{|}„6SOPQRLMNHIJKXYZ[\]^}{|„21 '&%$#"!   Safe-Inferred"%&?ãïÖBlammoÀAdd context to any logging done from the request-handling threadBlammo, 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"%&?ãï¿—Blammo Construct a }% configured via environment variables˜Blammo Construct a }0 configured via environment variables and use it8  !"#$%&'21HKIJLMNORPQSXYZ[\]^{|}„—˜—˜§ !"#$%&$%'$%()*+)*,)*-)*.)*/)*0)*1)*2)*3)*4)*5)*678978:78;78<78=78>78?78@78A78B78C78D7EF7EG7EH7EI7EJ7EK7EL7EM7EM7EN7EOPPQRSTUVWXYZ[\]^_`abcdefghijklmno^pqrstuvwxyz{|}~`€‚ƒ„… † ‡ ˆ ‰ Š ‹ Œ  Ž‘’“ ” • – — ˜ ™ š › œ  ž Ÿ   ¡ ¢ “ £ ¤ ¥¦ § ¨ © ª « ¬ ­ ® ¯ ° ±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÂÃÅÆ%Blammo-1.1.2.0-9A1iDFofdPB3LH3rbSr4KdBlammo.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-4QFSJ9mRhdxDvTHHXtJzK8Data.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-54fC4IAw9sX90zqPWGpZxsControl.Monad.Logger LevelOther LevelError LevelWarn LevelInfo LevelDebugLogLevel LogSourcemonadLoggerLog MonadLogger askLoggerIO MonadLoggerIOLoggingT1monad-logger-aeson-0.4.0.4-ERAgGyHuoWQ4XoIHqXqz50Control.Monad.Logger.AesonmyThreadContextwithThreadContext logOtherNS logErrorNS logWarnNS logInfoNS logDebugNSlogOtherlogErrorlogWarnlogInfologDebug#Control.Monad.Logger.Aeson.InternalloggedMessageMetaloggedMessageTextloggedMessageThreadContextloggedMessageLogSourceloggedMessageLocloggedMessageLevelloggedMessageTimestamp LoggedMessage:#MessageColorsgrayblackcyanmagentablueyellowgreenredbolddim getColors LogLevels newLogLevels readLogLevels showLogLevelsshouldLogLeveldefaultLogLevels $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-AquznHpI3zEC6V2xgA44hWNetwork.Wai.InternalRequest remoteHost