55 lines
1.8 KiB
Markdown
55 lines
1.8 KiB
Markdown
# Logger Module
|
|
|
|
A file-based logger that writes structured entries to a JSONL file in the WordPress uploads directory. Designed as a drop-in replacement for `error_log()` that produces entries you can read, table-display, and download from the admin UI.
|
|
|
|
**Namespace:** `Reservair\Logger`
|
|
**Log file:** `wp-content/uploads/reservair/reservair.log`
|
|
|
|
## Usage
|
|
|
|
```php
|
|
use Reservair\Logger\Logger;
|
|
|
|
Logger::info('Timetable reservation created.');
|
|
Logger::warning('Maintainer email not set for timetable #' . $id);
|
|
Logger::error('Insert failed: ' . $message);
|
|
|
|
// Accepts Throwable directly — replaces error_log($e) call sites directly
|
|
Logger::error($exception);
|
|
```
|
|
|
|
## Admin UI integration
|
|
|
|
```php
|
|
use Reservair\Logger\Logger;
|
|
|
|
// Table — get_entries() returns newest-first; each entry has time/level/message keys
|
|
foreach (Logger::get_entries() as $entry) {
|
|
// $entry['time'] e.g. "2026-05-30 14:22:01"
|
|
// $entry['level'] "info" | "warning" | "error"
|
|
// $entry['message'] the log text
|
|
}
|
|
|
|
// Download button — serve this path as a file download
|
|
$path = Logger::get_path();
|
|
|
|
// Clear the log
|
|
Logger::clear();
|
|
```
|
|
|
|
## Log file format
|
|
|
|
Each line is a JSON object (JSONL). Safe to tail, grep, or import into any log viewer.
|
|
|
|
```json
|
|
{"time":"2026-05-30 14:22:01","level":"info","message":"Reservation #12 created."}
|
|
{"time":"2026-05-30 14:22:03","level":"error","message":"Insert failed: Duplicate entry"}
|
|
```
|
|
|
|
## Notes
|
|
|
|
- Written to `wp-content/uploads/reservair/` rather than the plugin directory so the file survives plugin updates.
|
|
- The directory is created on first write with an `.htaccess` that blocks direct browser access (`Deny from all`).
|
|
- `LOCK_EX` is used on every write to prevent interleaved entries under concurrent requests.
|
|
- `wp_upload_dir()` result is cached statically to avoid repeated database lookups per request.
|