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