Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 20 additions & 12 deletions lib/mobility-core/src/Kernel/Utils/App.hs
Original file line number Diff line number Diff line change
Expand Up @@ -222,11 +222,19 @@ logRequestAndResponseGeneric logInfoIO f req respF =
logInfoIO "Request&Response" $ "Request: " <> show (toRequestInfo req) <> " || Response: " <> respLogText
respF resp

removeUUIDs :: Text -> Text
removeUUIDs path = T.pack . flip (TR.subRegex (TR.mkRegex "[0-9a-z]{8}-([0-9a-z]{4}-){3}[0-9a-z]{12}")) ":id" $ T.unpack path

removeNumerics :: Text -> Text
removeNumerics path = T.pack $ TR.subRegex (TR.mkRegex "/[0-9]+") (T.unpack path) "/:numeric"

withModifiedEnv :: HasLog f => (EnvR f -> Application) -> EnvR f -> Application
withModifiedEnv = withModifiedEnvFn $ \_ env requestId sessionId -> do
let appEnv = env.appEnv
updLogEnv = appendLogTag requestId $ appendLogTag sessionId appEnv.loggerEnv
newFlowRt <- L.updateLoggerContext (L.appendLogContext requestId) $ flowRuntime env
withModifiedEnv = withModifiedEnvFn $ \req env requestId sessionId -> do
let url = cs $ Wai.rawPathInfo req
sanitizedUrl = removeNumerics $ removeUUIDs url
appEnv = env.appEnv
updLogEnv = appendLogTag ("url:" <> sanitizedUrl) $ appendLogTag requestId $ appendLogTag sessionId appEnv.loggerEnv
newFlowRt <- L.updateLoggerContext (L.appendLogContext $ requestId <> " " <> url) $ flowRuntime env
newOptionsLocal <- newMVar mempty
pure $
env{appEnv = appEnv{loggerEnv = updLogEnv, requestId = Just requestId},
Expand All @@ -236,15 +244,13 @@ withModifiedEnv = withModifiedEnvFn $ \_ env requestId sessionId -> do
withModifiedEnv' :: (HasARTFlow f, HasCoreMetrics f, HasField "esqDBEnv" f EsqDBEnv, HedisFlowEnv f, HasInMemEnv f, HasCacheConfig f, HasSchemaName BeamSC.SystemConfigsT, HasCacConfig f) => (EnvR f -> Application) -> EnvR f -> Application
withModifiedEnv' = withModifiedEnvFn $ \req env requestId sessionId -> do
let url = cs $ Wai.rawPathInfo req
sanitizedUrl = removeUUIDs url
uuidSanitizedUrl = removeUUIDs url
mbDynamicLogLevelConfig <- runFlowR env.flowRuntime env.appEnv $ getDynamicLogLevelConfig
modifyEnvR env (HM.lookup sanitizedUrl =<< mbDynamicLogLevelConfig) requestId sessionId url (removeNumerics sanitizedUrl)
modifyEnvR env (HM.lookup uuidSanitizedUrl =<< mbDynamicLogLevelConfig) requestId sessionId url (removeNumerics uuidSanitizedUrl)
where
removeUUIDs path = T.pack . flip (TR.subRegex (TR.mkRegex "[0-9a-z]{8}-([0-9a-z]{4}-){3}[0-9a-z]{12}")) ":id" $ T.unpack path
removeNumerics path = T.pack $ TR.subRegex (TR.mkRegex "/[0-9]+") (T.unpack path) "/:numeric"
modifyEnvR env mbLogLevel requestId sessionId url sanitizedUrl = do
let appEnv = env.appEnv
updLogEnv = appendLogTag sessionId $ appendLogTag requestId appEnv.loggerEnv
updLogEnv = appendLogTag ("url:" <> sanitizedUrl) $ appendLogTag sessionId $ appendLogTag requestId appEnv.loggerEnv
updLogEnv' = updateLogLevelAndRawSql mbLogLevel updLogEnv
let requestId' = bool Nothing (Just requestId) appEnv.shouldLogRequestId
sessionId' = bool Nothing (Just sessionId) appEnv.shouldLogRequestId
Expand Down Expand Up @@ -274,12 +280,14 @@ withModifiedEnvFn modifierFn f env = \req resp -> do
withModifiedEnvGeneric :: HasLog env => (env -> Application) -> env -> Application
withModifiedEnvGeneric f env = \req resp -> do
(requestId, sessionId) <- getSessionInfo $ Wai.requestHeaders req
let modifiedEnv = modifyEnv requestId sessionId
let url = cs $ Wai.rawPathInfo req
sanitizedUrl = removeNumerics $ removeUUIDs url
modifiedEnv = modifyEnv requestId sessionId sanitizedUrl
let app = f modifiedEnv
app req resp
where
modifyEnv requestId sessionId = do
let updLogEnv = appendLogTag requestId $ appendLogTag sessionId env.loggerEnv
modifyEnv requestId sessionId sanitizedUrl = do
let updLogEnv = appendLogTag ("url:" <> sanitizedUrl) $ appendLogTag requestId $ appendLogTag sessionId env.loggerEnv
env{loggerEnv = updLogEnv, requestId = Just requestId, sessionId = Just sessionId}
getSessionInfo headers = do
let requestId = lookup "x-request-id" headers
Expand Down
13 changes: 10 additions & 3 deletions lib/mobility-core/src/Kernel/Utils/IOLogging.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ where
import qualified Control.Monad.Catch as C
import Data.Aeson as A
import qualified Data.Aeson.KeyMap as AKM
import Data.List (partition)
import qualified Data.Text as T
import qualified Data.Time as Time
import Kernel.Prelude
Expand Down Expand Up @@ -126,13 +127,18 @@ updateLogLevelAndRawSql mbNewLogLevel logEnv =
(\newLogLevel -> logEnv{level = newLogLevel, logRawSql = newLogLevel == DEBUG})
mbNewLogLevel

formatTags :: [Text] -> Text
formatTags tag = "[" <> T.intercalate ", " (reverse tag) <> "]"
formatTags :: [Text] -> Maybe Text -> Text
formatTags tags mUrl =
"[" <> T.intercalate ", " (reverse tags)
<> maybe "" (\url -> ", url-" <> url) mUrl
<> "]"

logFormatterText :: Time.UTCTime -> Maybe Text -> LogLevel -> [Text] -> Text -> Maybe Text -> Maybe Text -> A.Value
logFormatterText timestamp hostname lvl tags msg requestId sessionId = res
where
tag = if null tags then "" else formatTags tags
(urlTags, otherTags) = partition (T.isPrefixOf "url:") tags
mUrl = listToMaybe urlTags <&> T.drop 4
tag = if null otherTags then "" else formatTags otherTags mUrl
log =
show timestamp
<> " "
Expand All @@ -148,4 +154,5 @@ logFormatterText timestamp hostname lvl tags msg requestId sessionId = res
. AKM.insert "timestamp" (A.String $ show timestamp)
. maybe (\a -> a) (AKM.insert "requestId" . A.String) requestId
. maybe (\a -> a) (AKM.insert "sessionId" . A.String) sessionId
. maybe (\a -> a) (AKM.insert "url" . A.String) mUrl
$ AKM.insert "log" (A.String log) AKM.empty