# php-bsrutils (`bsr/utils`) Shared utilities for the Callio API family: `Configuration`, `Logger`, `FileSystem`, `WhichEnv`. Consumed by `php-callioapi`, `bsr/webservice`, `bsr/db`. ## Logger Request/diagnostic logger writing plain-text lines to the file configured as `log.file` (see `Configuration`). Used by `bsr/webservice` to log every API call as: ``` - [] - - - () ``` ### Built-in daily rotation — directory must be writable by the PHP user The Logger rotates its own file: on the first write after midnight it renames `log.txt` → `log.txt.2` (shifting older files up) and keeps roughly ten days (`log.txt.2` … `log.txt.9`; higher numbers are deleted). There is **no logrotate involvement** — do not add a logrotate entry for these files, it would race the built-in rotation. **Critical operational requirement:** `rename()` needs *write permission on the log directory*, not just the file. The PHP process (typically `www-data`) can happily keep appending to a `log.txt` it owns while every rotation attempt silently fails, because the directory denies it — PHP's `rename()` warning is not surfaced anywhere. Known real-world failure (production `callioapi`, Nov 2021 → Jul 2026): the log directory was owned `guillermo:users` mode `755`, so `www-data` could not rename. Rotation died silently and `log.txt` grew to ~945 MB, eventually filling the 15 GB disk and truncating a Solr reindex. The rotated-file dates freeze at the moment the directory permissions broke — that is the telltale sign to look for. Correct setup (matches the vhosts where rotation works): ```sh chown :www-data /var/www//log chmod g+w /var/www//log ``` Health check: `ls /var/www//log` — if `log.txt.2`'s mtime is older than yesterday while `log.txt` keeps growing, rotation is broken; check the directory permissions first. ### Security note `bsr/webservice` logs every API call **with raw parameters**, which for `authenticate(user, password)` means plaintext passwords end up in these files. Treat the log directory as secret-bearing: never make it world-readable, and scrub/redact before copying logs elsewhere.