h&~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi j k l m n o p q r s t u v wx y z { | } ~      Safe-Inferred"%&?I 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[\]^_O=KLMNHIJDEFGPQRSTUVWXYZ[\]^_ Safe-Inferred"%&?BlammoHow to parse the valueBlammo*How to turn the parsed value into a setter`abc`abc Safe-Inferred"%&? -,+*)('&%defg d-,+*)('&%efg Safe-Inferred"%&?.   Safe-Inferred"%&?nhh  Safe-Inferred"%&? rBlammo Create a k7 that will capture log messages instead of logging themSee Blammo.Logging.LoggedMessages for more details.sBlammoReturn the logged messages if r was used#If not, the empty list is returned.tBlammos+ but ignore any messages that fail to parseuBlammos but  if any messages failed to parse-,+*)('&%ijklmnopqrstukijpqlmnor-,+*)('&%stu Safe-Inferred"%&?f4   !"#$/.DEFGHIJKLMNOTUVWXijkpw4O KLMNHIJDEFGTUVWXkijpw/. $#"!   Safe-Inferred"%&?xBlammo Construct a k% configured via environment variablesyBlammo Construct a k0 configured via environment variables and use it6   !"#$/.DGEFHIJKNLMOTUVWXijkpwxyxy  Safe-Inferred"%&?"{BlammoAdd 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: "foobar", 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. z{|}~ {|}z~  Safe-Inferred"%&?i             !"#$"#%"#&"#'"#("#)"#*"#+"#,"#-"#."#/01201301401501601701801901:01;01<01=0>?0>@0>A0>B0>C0>D0>E0>F0>F0>G0>HIIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgWhijklmnopqrsXtuvwxyz{|}~           }                      %Blammo-1.1.0.0-C76k8ptR4qD5P0wVuuYTq7Blammo.LoggingData.Aeson.Compat$Blammo.Logging.LogSettings.LogLevelsBlammo.Logging.TestBlammo.Logging.ColorsBlammo.Logging.LogSettingsBlammo.Logging.LogSettings.EnvBlammo.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 readLogColordefaultLogSettingssetLogSettingsLevelssetLogSettingsDestinationsetLogSettingsFormatsetLogSettingsColorgetLogSettingsLevelsgetLogSettingsDestinationgetLogSettingsFormatgetLogSettingsColorshouldColorAutoshouldColorHandleparseparser parseWith parserWithLoggedMessagesnewLoggedMessages appendLogStrgetLoggedMessagesreformatTerminal HasLoggerloggerLLoggergetLoggerReformatgetLoggerShouldLog pushLogStrLn flushLogStr newLogger flushLogger newTestLoggergetLoggedMessagesLenientgetLoggedMessagesUnsafe$fHasLoggerLoggerrunLoggerLoggingT newLoggerEnvrunSimpleLoggingTConfigaddThreadContextaddThreadContextFromRequest requestLogger defaultConfigsetConfigLogSourcesetConfigGetClientIpsetConfigGetDestinationIprequestLoggerWithlgteghc-prim GHC.Classes>=endo(unliftio-0.2.22.0-B7yEMINQ8N11T7cndnjCmcUnliftIO.Exception throwString wai-3.2.3-GJ93JXcVtKMJ4Od8PN5oi0Network.Wai.InternalRequest remoteHostversiongetDataFileName getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDir