wc_get_logger()), so everything lands in WooCommerce → Status → Logs. There is no plugin-specific log screen and no custom retention: WooCommerce’s own file-log rotation applies (logs are kept for the retention period configured under WooCommerce → Status → Logs → Settings, 30 days by default).
Where to read the logs
1
Open the log screen
Go to WooCommerce → Status → Logs.
2
Filter by source
Use the source filter dropdown to pick one of the sources below. Each source becomes its own dated log file.
The first source name is misspelled in the code —
teamzlab_fedex_shippnig (note shippnig). The typo is load-bearing: it is the literal source string in includes/HTTP/Shipping.php:22, so you must select the misspelled spelling in the dropdown or you will see an empty log.Active log sources
Five sources are actually written in v1.2.3 (each maps to onewc_get_logger() call site):
Detail level: WP_DEBUG gate
Both request/response sources are deliberately quiet by default because full FedEx JSON carries customer PII:
teamzlab_fedex_shippnig— withWP_DEBUGon, full request and response JSON per phase (includes the customer destination postcode and cart contents). WithoutWP_DEBUG, a single non-PII summary line per phase: HTTP status, rate count, requested service, first FedEx error code.teamz_shipment_create— the full-payload check isdefined( 'WP_DEBUG' ) && WP_DEBUG(includes/HTTP/Shipment.php:210for the request,:239for the response). WithoutWP_DEBUGyou getPayload: service=<serviceType> packages=<n>andResponse: tracking=<number> service=<serviceType> http_status=<code> error_code=<code>.
WP_DEBUG and WP_DEBUG_LOG in wp-config.php:
Declared-but-inactive sources
Every HTTP client class declares a$log_source property, but the shared base-client logger is an intentional no-op in this build (includes/Compat/Traits/LogsHttp.php), so no entries are ever written under these sources. They are listed here so you do not go looking for them:
fshipping_http (base default), fshipping_address_validation, fshipping_freight_ltl, fshipping_global_trade, fshipping_locations, fshipping_openship, fshipping_pickup, fshipping_postal_code, fshipping_rates, fshipping_return_tag, fshipping_service_availability, fshipping_ship_close, fshipping_ship_retrieve, fshipping_ship_validate, fshipping_tracking, fshipping_aiv, fshipping_trade_docs, fshipping_sandbox_ping.
Open Ship logging surfaces
HTTP\OpenShip has five instrumentation surfaces, all writing to wp-content/debug.log (not the WooCommerce log). In v1.2.3 the three writer methods (debug_log_push_json_blocks(), debug_log_push_message(), emit_openship_log_output() at includes/HTTP/OpenShip.php:2006-2038) are stubbed no-ops, so nothing is emitted today. The surfaces and their gates still matter if you wire the writers or need to know what the filters control:
For Open Ship diagnosis today, use order notes and order meta instead — see below.
Staging-mode log
Separate from WooCommerce logging: while the hidden optionfshipping_staging_mode is set to yes, Migration\StagingMode::debug_log() appends rate-call events to the option fshipping_staging_log (rolling buffer, last 100 entries). Written by Events\RuntimeIntegrator. No UI reads it in this version — query the option with WP-CLI:
What is never logged
- OAuth credentials. The bearer token travels in the
Authorizationheader, and the loggers only serialize request/response bodies, so the token, Client ID, and Client Secret never appear in any log line (includes/HTTP/Shipping.php:365states this contract in code). - Non-debug lines are PII-free by design — service type, package count, tracking number, HTTP and error codes only.
- Under
WP_DEBUG, customer PII is logged (name, phone, street address, destination postcode, cart contents). Treat verbose logs as sensitive: do not paste them into public tickets unredacted.
Order notes as the operational log
The most complete per-order history is not a log file at all — it is WooCommerce order notes (all written as admin-only notes, so customers never see them). Events that add a note:
For Open Ship errors that FedEx returned, the raw response is also stored on the order in
_fshipping_openship_last_confirm_json and _fshipping_last_error — read those when the debug.log writers are off.
Using logs in support
A reproducible bundle for a “label failed” ticket:- Rate log present but no
teamz_shipment_createentries → checkout never reached the Ship call (quota, pre-ship guard, or non-FedEx method — check the order notes). teamz_shipment_createresponse showserror_code=→ the failure is FedEx-side; the code maps to the errors array in the response.- The public rate widget (
GET /fshipping/v1/rate-quote) intentionally logs nothing — its rate limiting and caching are documented in REST API.
Architecture
How the layers and the HTTP clients fit together.
Hooks & filters
Every filter and action, including the Open Ship log gates.
Options, quota & data model
Transient keys, TTLs, and the staging log option.
REST API
The public endpoints and their rate limits.