Repository: traefik/traefik (language: go)

Issue:
ServiceURL format in access logs
### Welcome!

- [X] Yes, I've searched similar issues on [GitHub](https://github.com/traefik/traefik/issues) and didn't find any.
- [X] Yes, I've searched similar issues on the [Traefik community forum](https://community.traefik.io) and didn't find any.

### What did you do?

Using docker compose:

```yaml
version: "3.3"

services:

  traefik:
    image: "traefik:v3.0.4"
    container_name: "traefik"
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:80"
      - "--accesslog=true"
      - "--accesslog.format=json"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "traefik/whoami"
    container_name: "simple-service"
    depends_on:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
      - "traefik.http.routers.whoami.entrypoints=web"
 ```

With `traefik:v2.11` the generated access logs formats `ServiceURL` as an *Object*:
```json
{
"RouterName":"whoami@docker",
"ServiceAddr":"172.27.0.3:80",
"ServiceName":"whoami-041-traefik@docker",
"ServiceURL":{"Scheme":"http","Opaque":"","User":null,"Host":"172.27.0.3:80","Path":"","RawPath":"","OmitHost":false,"ForceQuery":false,"RawQuery":"","Fragment":"","RawFragment":""},
"StartLocal":"2024-07-09T06:54:54.724774395Z",
"StartUTC":"2024-07-09T06:54:54.724774395Z"
}  
```

With `traefik:v3.0` the generated access logs formats `ServiceURL` as an *String*:
```json
{
"RouterName":"whoami@docker",
"ServiceAddr":"172.27.0.3:80",
"ServiceName":"whoami-041-traefik@docker",
"ServiceURL":"http://172.27.0.3:80",
"StartLocal":"2024-07-09T06:54:17.963729346Z",
"StartUTC":"2024-07-09T06:54:17.963729346Z",
}  
```

I could not find any changelog entries for this behavoir and this is causing problems regarding our Index Templates in Elasticsearch that expect an JSON object.


### What did you see instead?

See difference in access logs format above

### What version of Traefik are you using?

3.0 vs. 2.11

### What is your environment & configuration?

See docker compose yaml above

### If applicable, please paste the log output in DEBUG level

Not applicable


Discussion / hints:
Hi! We have the same problem - OpenSearch logs indexes are blocked by the new logs structure. Could it be the new logger that you are using since 3.0, guys?
Hi @r3kzi,

Thanks for this issue. It as been labeled as bug confirmed because we have forgot to document this breaking change. A PR will land soon to address that. 

Fix patch:
diff --git a/docs/content/migration/v2-to-v3-details.md b/docs/content/migration/v2-to-v3-details.md
index ad6f04dfbb..fcbe58eea7 100644
--- a/docs/content/migration/v2-to-v3-details.md
+++ b/docs/content/migration/v2-to-v3-details.md
@@ -591,6 +591,11 @@ Please take a look at the observability documentation for more information:
 - [Metrics](../observability/metrics/overview.md#addinternals)
 - [Tracing](../observability/tracing/overview.md#addinternals)
 
+#### Access logs
+
+In v3, the `ServiceURL` field is not an object anymore but a string representation.
+An update may be required if you index access logs.
+
 ## Dynamic Configuration Changes
 
 ### Router Rule Matchers


Test patch: