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-,+*)('&%ijklmnopqrstukijqmnopr-,+*)('&%stul Safe-Inferred"%&?f4   !"#$/.DEFGHIJKLMNOTUVWXijkqw4O KLMNHIJDEFGTUVWXkijqw/. $#"!   Safe-Inferred"%&?xBlammo Construct a k% configured via environment variablesyBlammo Construct a k0 configured via environment variables and use it6   !"#$/.DGEFHIJKNLMOTUVWXijkqwxyxy  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.0.3.0-CtrbAs9bKcMBNC1cUfGESbBlammo.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-93bJHL0DQla3wiA1jTl82yControl.Monad.Logger LevelOther LevelError LevelWarn LevelInfo LevelDebugLogLevel LogSourcemonadLoggerLog MonadLogger askLoggerIO MonadLoggerIOLoggingT1monad-logger-aeson-0.4.0.2-J7Njq5Op2HKL04iFC9Pba1Control.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 HasLoggerloggerLLoggergetLoggerLoggerSetgetLoggerReformatgetLoggerShouldLog pushLogStrLn flushLogStr newLogger 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