ARTIFACTORY: JSON Logging to STDOUT

ARTIFACTORY: JSON Logging to STDOUT

Products
Frog_Artifactory
Content Type
Administration_Platform
AuthorFullName__c
Jeremy Leopold
articleNumber
000006863
FirstPublishedDate
2026-02-16T07:48:04Z
lastModifiedDate
2026-02-16
The following describes how to enable JSON-formatted logs to be streamed to STDOUT for container-based Artifactory deployments.


Design Principle


For Helm and Docker deployments, Artifactory’s logging model intentionally streams key operational, audit, and request logs to STDOUT to align with container logging best practices, while isolating high-volume or specialized logs to prevent log flooding and unnecessary overhead.

The microservices covered by this behavior include Artifactory, Access, Frontend, Router, Topology, Metadata, RTFS, Evidence, Observability, jfconnect, Event, and Onemodel.


Enable JSON Logs to STDOUT


To stream supported Artifactory logs to STDOUT in JSON format, enable the following in the values.yaml

For the jfrog-platform chart:
artifactory:
  logging:
    logToStdoutJson: true
For the artifactory chart:
logging:
    logToStdoutJson: true

 

Key points:
  • Enables JSON console appenders
  • Makes logs available via kubectl logs
  • Applies consistently across JFrog services
This Helm setting translates to the following system.yaml configuration, which is also applicable to Docker-based deployments:
shared:
  logging:
    enableJsonConsoleLogAppenders: true


Logs Included by Default

With logToStdoutJson=true, the following logs are streamed to STDOUT by design for the microservices listed above:
  • Microservice service logs (*-service.log)
  • Microservice request logs (*-request.log)
  • Microservice request-out logs (*-request-out.log)
  • Router service logs (router-service.log)
  • Frontend service logs (frontend-service.log)
These logs provide sufficient coverage for most operational monitoring and troubleshooting scenarios.


Router and Frontend Request Logs (Optional)


Certain high-volume request logs are intentionally excluded from STDOUT by default and must be explicitly enabled.

Enable Router request logs:
artifactory:
  extraSystemYaml:
    router:
      logging:
        request:
          console: true
Enable Frontend request logs:
artifactory:
  extraSystemYaml:
    frontend:
      logging:
        request:
          consoleTransport: true
These settings operate independently of logToStdoutJson and allow selective increases in request-level visibility when needed.


Validate Logging Output


Logs can be verified directly from the pod using kubectl logs. The examples below show JSON-formatted STDOUT logs across multiple microservices.
# Access microservice
for l in \
  access-request.log \
  access-security-audit.log \
  access-audit.log

do
  kubectl logs arti-artifactory-0 -c access -n artifactory | grep -m1 "\"log_name\":\"$l\""
done

{"log_name":"access-request.log","request":{"client":"127.0.0.1","useragent":"curl/7.76.1","trace-id":"da8eaed96c0161d2:da8eaed96c0161d2:0:0","user":"anonymous","method":"GET","path":"/access/api/v1/system/readiness","length":-1},"response":{"datetime":"2026-01-05T17:35:42.112Z","length":94,"status":"503","duration":658}}
{"log_name":"access-security-audit.log","audit":{"datetime":"2026-01-05T17:35:46.264Z","traceid":"11806007c1df1f18","performinguserip":"UNKNOWN","performinguser":"UNKNOWN","loggedinprincipal":"anonymous","entityname":"jfac@01ke7kmg2rb3ph187qn2qk04vj","securityeventtype":"C","securityevent":"TKN","datachanged":"{\"added\":{\"owner\":\"jfac@01ke7kmg2rb3ph187qn2qk04vj\",\"created\":\"1767634545899\",\"expirationTime\":\"1767634665899\",\"subject\":\"jfac@01ke7kmg2rb3ph187qn2qk04vj\",\"scope\":\"applied-permissions/admin api:*\",\"id\":\"d2f07cda-4634-40d1-8243-b9e26e06429c\",\"type\":\"generic\"}}"}}
{"log_name":"access-audit.log","audit":{"datetime":"2026-01-05T17:35:45.901Z","event":"created","username":"anonymous","tokenid":"d2f07cda-4634-40d1-8243-b9e26e06429c","issuer":"jfac@01ke7kmg2rb3ph187qn2qk04vj","subject":"jfac@01ke7kmg2rb3ph187qn2qk04vj","expirationtime":"1767634665899","refreshable":false}}

# Topology microservice
for l in \
  topology-request.log \
  topology-request-out.log \
  topology-service.log

do
  kubectl logs jfrog-artifactory-0 -c topology -n artifactory | grep -m1 "\"log_name\":\"$l\""
done

{"log_name":"topology-request.log","request":{"client":"10.232.2.1","useragent":"kube-probe/1.33","trace-id":"b145dd1acda60740","user":"anonymous","method":"GET","path":"/topology/api/v1/system/readiness","length":-1},"response":{"datetime":"2026-01-15T21:01:49.189Z","length":13,"status":"200","duration":568}}
{"log_name":"topology-request-out.log","request":{"trace-id":"0b2046de5491041c","method":"GET","url":"http://localhost:8046/access/api/v1/system/ping"},"response":{"datetime":"2026-01-15T21:01:55.617Z","status":"200","message":"OK","duration":370}}
{"log_name":"topology-service.log","app":{"datetime":"2026-01-15T21:00:49.214Z","service":"jftpl","loglevel":"INFO","class":"TopologyApplicationContextInitializer.java","line":82,"thread":"main","message":"topology (jftpl) service initialization started. Version: 1.122.8 Revision: 22208900 PID: 24 Home: /opt/jfrog/artifactory"}}

# Frontend microservice
kubectl logs -n artifactory jfrog-artifactory-0 -c frontend \
  | grep "frontend-request.log" \
  | tail -n 2

{"log_name":"frontend-request.log","request":{"client":"127.0.0.1","length":3,"method":"GET","path":"/api/v1/system/liveness","traceid":"","user":"anonymous","userAgent":"curl/7.76.1\n"},"response":{"datetime":"2026-01-13T16:43:27.592Z","duration":5.3,"length":"","status":200}}
{"log_name":"frontend-request.log","request":{"client":"127.0.0.1","length":3,"method":"GET","path":"/api/v1/system/liveness","traceid":"","user":"anonymous","userAgent":"curl/7.76.1\n"},"response":{"datetime":"2026-01-13T16:43:37.483Z","duration":8.479,"length":"","status":200}}

#Docker logs example
docker logs 7.132.0 2>/dev/null | grep '"log_name":"topology-request.log"' | tail -n 2

{"log_name":"topology-request.log","request":{"client":"0:0:0:0:0:0:0:1","useragent":"JFrog-Router/7.199.0-1","trace-id":"03148fa875e57d4f","user":"anonymous","method":"GET","path":"/topology/api/v1/system/readiness","length":-1},"response":{"datetime":"2026-01-16T07:29:33.041Z","length":13,"status":"200","duration":3}}
{"log_name":"topology-request.log","request":{"client":"/[0:0:0:0:0:0:0:1]:46940","useragent":"grpc-go/1.77.0","trace-id":"03148fa875e57d4f","user":"jfrou@01ke4y6ngq3vjgwjb9qt0p95cp","method":"--CST","path":"com.jfrog.access.v1.serviceregistry.ServiceRegistryResource/SendHeartbeat","length":-1},"response":{"datetime":"2026-01-16T07:29:33.051Z","length":-1,"status":"0","duration":3}}


File-Based Logs and Sidecar Logging

Some logs remain file-based by design and are not streamed to STDOUT. For environments that require tailing these logs via Kubernetes, sidecar containers can be enabled.

For configuration details and examples, refer to the official documentation:
How to enable sidecar containers for tailing Artifactory logs in Kubernetes