Logging & License Cache
The AgiqonConnector writes structured log entries to dedicated files and reduces live HTTP calls to the license API through a built-in cache.
Log channels and log files
Since version 3.7.2 the connector uses four dedicated Monolog channels. Each channel writes to its own rotating log file under log/AgiqonConnector/:
| Channel | File | Content |
|---|---|---|
agiqon_api | api_<env>.log | All HTTP calls to the license API |
agiqon_oci | oci_<env>.log | OCI login controller and function controllers |
agiqon_cxml | cxml_<env>.log | cXML login controller and cXML auth controller |
agiqon_connector | connector_<env>.log | General connector events |
<env> corresponds to the Symfony environment value (dev, prod, …).
Rotation settings: Each file rotates automatically. Up to 14 files are retained at DEBUG level.
What is logged?
OCI login controller (agiqon_oci)
| Event | Level |
|---|---|
| Successful login | INFO |
| Wrong credentials | WARNING |
| Inactive system | WARNING |
| Missing required fields | WARNING |
| Invalid hook URL | WARNING |
| Invalid license | WARNING |
Unsupported OCI function (OciUndefinedFunctionController) | WARNING |
| Unhandled error in the download JSON flow | ERROR |
cXML login controller and cXML auth controller (agiqon_cxml)
| Event | Level |
|---|---|
| Successful login / auth | INFO |
| Invalid or expired auth key | WARNING |
| Customer not found | WARNING |
| System not found | WARNING |
| Malformed stored XML | WARNING |
| SimpleXML parse error | WARNING |
License API client (agiqon_api)
| Event | Level |
|---|---|
| Cache hit (license served from cache) | DEBUG |
| Live license check against API | DEBUG |
| Stale cache used (API unreachable) | WARNING |
License check caching
To reduce the number of live HTTP calls to the license API on every login, the connector caches the result of the license check.
How it works
Login request
│
▼
Cache lookup (cache.app, key: agiqon_connector.license.<type>.<hash>)
│
├── Cache hit? → return result directly (no API call)
│
└── Cache miss?
│
▼
HTTP call to license API
│
├── Success (2xx)
│ → store result in short cache (10 min)
│ → store result in stale cache (24 h)
│ → return result
│
├── 4xx (invalid license)
│ → invalidate short cache + stale cache
│ → throw LicenseValidationException
│
└── Network error / API unreachable
│
├── Stale cache available?
│ → return stale result (WARNING logged)
└── No stale cache
→ throw LicenseApiUnavailableException
Cache parameters
| Parameter | Value |
|---|---|
| Cache service | cache.app (Symfony) |
| TTL | 10 minutes (600 seconds) |
| Stale fallback TTL | 24 hours (86 400 seconds) |
| Cache key format | agiqon_connector.license.<type>.<sha1(id.domain)> |
Cache invalidation
The cache is invalidated immediately when the license API returns a 401 or 403 response. This ensures that invalid licenses are never served from cache.
The stale fallback ensures that users can continue to log in during a temporary license API outage. After 24 hours at most, logins will no longer succeed without a valid API response.
Exception classes
Since version 3.7.2 there are typed exception classes for license API errors:
| Class | When thrown |
|---|---|
LicenseValidationException | 4xx response from the license API (carries the HTTP status code) |
LicenseApiUnavailableException | Network error / license API unreachable |
OciAuthenticationException | Failed OCI authentication flow |