Introduction
When using JFrog Artifactory, technical difficulties are intermittently encountered. It is advisable to examine the logs for error messages and potential solutions before contacting JFrog Support. The JFrog Platform centralizes logging data from all JFrog products and services, employing standardized formats and naming conventions to streamline troubleshooting. This article details a troubleshooting methodology that utilizes these application-generated logs.
Importance of Trace ID in Troubleshooting
The JFrog Platform has integrated a Trace ID concept to enhance the tracking of individual requests. This integration refines log analysis through more precise tracing of event flows across diverse services, thereby improving the efficiency of issue resolution. You may refer to this knowledge base article to get more insights on adding Trace ID as a header for troubleshooting purposes.
Log Format Overview
As indicated in our documentation, the active log files for each JFrog service can be found in the $JFROG_HOME/<product>/var/log directory. Each log file is prefixed with the service name followed by a hyphen, for instance, artifactory-service.log and router-request.log.
Service Log Entries
A service log file entry is structured as follows:
Timestamp (UTC) [Service Type] [Level] [Trace ID] [Class and Line Number] [Thread] - Message
2025-04-18T15:39:04.902Z [jfac] [INFO] [4b1b8a0b04e31b80] [s.r.NodeRegistryServiceImpl:44] [http-exec-4] - Request to "join" with serviceId jffe@000
Request Log Entries
A request log file entry is structured as follows:
Timestamp | Trace ID | Remote Address | Username | Request Method | Request URL | Return Status | Request Content-Length | Response Content-Length | Request Duration | Request User Agent
Example:
2025-04-18T15:39:04.902Z|d5d75b3c41242768|127.0.0.1|anonymous|GET|api/v1/cert/root|200|0|6|0|JFrog Access Java Client/x.y.z.
Example Use Cases
Scenario 1: Uploading an Artifact to Artifactory using cURL
When an artifact is deployed using cURL, both the request and its subsequent log entries can be examined to locate the corresponding trace ID.
Sample cURL command for Artifact Deployment in Artifactory
$ curl -u admin -X PUT http://jfrog.local/artifactory/example-repo-local/apache-log4j-2.13.3-bin.tar.gz -T ~/Downloads/apache-log4j-2.13.3-bin.tar.gz
Subsequent to the successful upload of the artifact, the ensuing log entries will be generated, demonstrating the correlation between the request and the service's operations.
Example Service Log Entry:
2025-04-18T05:19:49.158Z [jfrt] [INFO] [2e896eb103b28d7c] [o.a.e.UploadServiceImpl:466] [http-nio-8081-exec-6] - Deploy to 'example-repo-local:apache-log4j-2.13.3-bin.tar.gz' Content-Length: 14378385 (estimation) artificial: false
Search for Relevant Logs using Trace ID
By utilizing the trace ID (2e896eb103b28d7c), we can execute a search within your log files to acquire insights from all relevant microservice logs.
Here is a sample command for reference.
$ grep -iR 2e896eb103b28d7c /opt/jfrog/artifactory/var/log/*
This command compiles all related log entries, providing a comprehensive view of the process flow and aiding in effective issue diagnosis.
Scenario 2: Download Attempt Failed
Consider a situation in which an attempt is made to download content from an Artifactory instance where the binary has been deleted from the filestore. The user will encounter an issue upon initiating the download request, which will generate an error log entry stating, "Binary provider has no content”.
artifactory-service.log
2025-07-03T13:55:32.482Z [jfrt ] [ERROR] [1027a6d6bd41097e] [.r.ArtifactoryResponseBase:195] [http-nio-8081-exec-7] - Sending HTTP error code 500: Binary provider has no content for '16539c4bacbbd65a85c248589d066e0cd628e85c'
org.jfrog.storage.binstore.exceptions.BinaryNotFoundException: Binary provider has no content for '16539c4bacbbd65a85c248589d066e0cd628e85c'
By analyzing the comprehensive array of log files for the associated trace ID, we can precisely pinpoint the origin of the issue within the request processing chain. Below is a sample command for reference:
$ grep -iR 1027a6d6bd41097e /opt/jfrog/artifactory/var/log/*.log
This command allows us to list all entries related to the request in the Artifactory logs, helping to identify the sequence of events occurring in the backend.
Conclusion
A comprehensive review of the request flow, coupled with an analysis of log entry errors and warnings, typically reveals the root cause of encountered issues. By utilizing the JFrog Platform's enhanced logging features, technical problems can be efficiently diagnosed and resolved, thereby minimizing workflow disruptions.
While JFrog Support is available for further assistance, we recommend using these logging insights as an initial step in your troubleshooting process.