Issue:
Bug: feat(logging): add flow field to logging framework



Add API Flow field to the root span & persistent keys

Pull request description:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [x] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
- Adding flow to the persistent keys in subscriber layer
- Adding flow to the middle ware log

### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
2. `crates/router/src/configs`
3. `loadtest/config`
-->


## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless it is an obvious bug or documentation fix
that will have little conversation).
-->
- Adding flow to the persistent keys in api's

## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->

run the application locally
all api requests should have the following log line at the end of request
- the fields should be populated when available
- These log line will be generated even for health & non-existent paths (e.g `/` or `/favicon.ico`)

```json
{
    "message": "[GOLDEN_LOG_LINE - EVENT] REQUEST MIDDLEWARE END",
    "hostname": "<MY_MACHINE>.local",
    "pid": 62901,
    "env": "development",
    "level": "INFO",
    "target": "router::middleware",
    "service": "router",
    "line": 61,
    "file": "crates/router/src/middleware.rs",
    "fn": "golden_log_line",
    "full_name": "router::middleware::golden_log_line",
    "flow": "PaymentsCreate",
    "time": "2024-01-24T06:35:06.771569000Z",
    "merchant_id": "merchant_1706060159",
    "request_id": "018d3a2d-e583-7581-8992-8596b3052995",
    "extra": {
        "trace_id": "00000000000000000000000000000000",
        "http.method": "POST",
        "http.route": "/payments",
        "http.flavor": "1.1",
        "http.user_agent": "PostmanRuntime/7.33.0",
        "payment_id": "payment_intent_id = \"pay_y8XHx5whOaWTdoGrgAAf\"",
        "otel.name": "HTTP POST /payments",
        "http.client_ip": "::1",
        "http.host": "localhost:8080",
        "http.target": "/payments",
        "http.scheme": "http",
        "otel.kind": "server"
    }
}
```

## Checklist
<!-- Put an `x` in the boxes that apply -->

- [ ] I formatted the code `cargo +nightly fmt --all`
- [ ] I addressed lints thrown by `cargo clippy`
- [ ] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
- [ ] I added a [CHANGELOG](/CHANGELOG.md) entry if applicable


Testing:


run the application locally
all api requests should have the following log line at the end of request
- the fields should be populated when available
- These log line will be generated even for health & non-existent paths (e.g `/` or `/favicon.ico`)

```json
{
    "message": "[GOLDEN_LOG_LINE - EVENT] REQUEST MIDDLEWARE END",
    "hostname": "<MY_MACHINE>.local",
    "pid": 62901,
    "env": "development",
    "level": "INFO",
    "target": "router::middleware",
    "service": "router",
    "line": 61,
    "file": "crates/router/src/middleware.rs",
    "fn": "golden_log_line",
    "full_name": "router::middleware::golden_log_line",
    "flow": "PaymentsCreate",
    "time": "2024-01-24T06:35:06.771569000Z",
    "merchant_id": "merchant_1706060159",
    "request_id": "018d3a2d-e583-7581-8992-8596b3052995",
    "extra": {
        "trace_id": "00000000000000000000000000000000",
        "http.method": "POST",
        "http.route": "/payments",
        "http.flavor": "1.1",
        "http.user_agent": "PostmanRuntime/7.33.0",
        "payment_id": "payment_intent_id = \"pay_y8XHx5whOaWTdoGrgAAf\"",
        "otel.name": "HTTP POST /payments",
        "http.client_ip": "::1",
        "http.host": "localhost:8080",
        "http.target": "/payments",
        "http.scheme": "http",
        "otel.kind": "server"
    }
}
```

Patch:
diff --git a/crates/router/src/middleware.rs b/crates/router/src/middleware.rs
index 587a15693f2..702c3c70e6c 100644
--- a/crates/router/src/middleware.rs
+++ b/crates/router/src/middleware.rs
@@ -58,7 +58,7 @@ where
                 let request_id = request_id_fut.await?;
                 let request_id = request_id.as_hyphenated().to_string();
                 if let Some(upstream_request_id) = old_x_request_id {
-                    router_env::logger::info!(?request_id, ?upstream_request_id);
+                    router_env::logger::info!(?upstream_request_id);
                 }
                 let mut response = response_fut.await?;
                 response.headers_mut().append(
@@ -146,7 +146,8 @@ where
                     "golden_log_line",
                     payment_id = Empty,
                     merchant_id = Empty,
-                    connector_name = Empty
+                    connector_name = Empty,
+                    flow = "UNKNOWN"
                 )
                 .or_current(),
             ),
diff --git a/crates/router_env/src/logger/storage.rs b/crates/router_env/src/logger/storage.rs
index 961a77c65aa..036a73cf874 100644
--- a/crates/router_env/src/logger/storage.rs
+++ b/crates/router_env/src/logger/storage.rs
@@ -92,7 +92,7 @@ impl Visit for Storage<'_> {
     }
 }
 
-const PERSISTENT_KEYS: [&str; 3] = ["payment_id", "connector_name", "merchant_id"];
+const PERSISTENT_KEYS: [&str; 4] = ["payment_id", "connector_name", "merchant_id", "flow"];
 
 impl<S: Subscriber + for<'a> tracing_subscriber::registry::LookupSpan<'a>> Layer<S>
     for StorageSubscription