From 1deee0e7cd00ac603a0cbe256697fe8dc1f58396 Mon Sep 17 00:00:00 2001 From: Mohamed Hamdan Assan Ali Date: Wed, 24 Dec 2025 15:35:47 +0530 Subject: [PATCH 1/2] feat : added url to the log --- lib/mobility-core/src/Kernel/Utils/App.hs | 2 +- lib/mobility-core/src/Kernel/Utils/IOLogging.hs | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/mobility-core/src/Kernel/Utils/App.hs b/lib/mobility-core/src/Kernel/Utils/App.hs index 08f63e504..55495b096 100644 --- a/lib/mobility-core/src/Kernel/Utils/App.hs +++ b/lib/mobility-core/src/Kernel/Utils/App.hs @@ -244,7 +244,7 @@ withModifiedEnv' = withModifiedEnvFn $ \req env requestId sessionId -> do 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 diff --git a/lib/mobility-core/src/Kernel/Utils/IOLogging.hs b/lib/mobility-core/src/Kernel/Utils/IOLogging.hs index e756154f6..e3109d7f6 100644 --- a/lib/mobility-core/src/Kernel/Utils/IOLogging.hs +++ b/lib/mobility-core/src/Kernel/Utils/IOLogging.hs @@ -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 @@ -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 <> " " @@ -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 From 66181272458a806bdf07c19c4a92e387978f5aa1 Mon Sep 17 00:00:00 2001 From: Mohamed Hamdan Assan Ali Date: Fri, 26 Dec 2025 20:32:38 +0530 Subject: [PATCH 2/2] added url to other functions --- lib/mobility-core/src/Kernel/Utils/App.hs | 30 ++++++++++++++--------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/lib/mobility-core/src/Kernel/Utils/App.hs b/lib/mobility-core/src/Kernel/Utils/App.hs index 55495b096..e283fdc2a 100644 --- a/lib/mobility-core/src/Kernel/Utils/App.hs +++ b/lib/mobility-core/src/Kernel/Utils/App.hs @@ -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}, @@ -236,12 +244,10 @@ 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 ("url:" <> sanitizedUrl) $ appendLogTag sessionId $ appendLogTag requestId appEnv.loggerEnv @@ -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