Logger Adapters
Logger ships with three adapters.
single
SingleAdapter writes every accepted log entry to one configured file path.
Expected config shape
The adapter expects logging.single.path to point to a file path, for example:
[
'path' => base_dir() . DS . 'storage' . DS . 'logs' . DS . 'app.log',
]
Contract
At construction time, the adapter checks that the configured path looks like a file path (has an extension).
If it does not, the adapter throws LoggerException::logPathIsNotFile(...).
The adapter does not pre-create directories for you; the target path must be writable by your runtime.
Use single when you want one append-only log file.
daily
DailyAdapter writes to a file named after the current date inside a configured directory.
Expected config shape
The adapter expects logging.daily.path to point to an existing directory, for example:
[
'path' => base_dir() . DS . 'storage' . DS . 'logs',
]
At runtime it writes to:
<path>/<YYYY-MM-DD>.log
Contract
At construction time, the adapter requires the configured path to already be a directory.
If it is not, the adapter throws LoggerException::logPathIsNotDirectory(...).
The daily filename is chosen when the adapter instance is created. In long-running processes, rotate/re-resolve the logger after date rollover if you need strict day-boundary files.
Use daily when you want automatic file splitting by day.
message
MessageAdapter sends accepted log entries to Quantum's debugger message store instead of the filesystem.
How tab routing works
The adapter uses:
Debugger::MESSAGESby defaultcontext['tab']when you pass one
Example:
logger()->info('Mailer connected', ['tab' => 'mails']);
The debugger store receives the level and raw message as separate values. File-style formatting and trace appends are specific to the file adapters.
Contract
- available only in debug mode
- writes only when
debugbar()->isEnabled()is true - ignores file-path config because it has no constructor parameters
Outside debug mode, explicitly requesting message causes the factory to throw an adapter-not-supported exception.
File output format
Both file adapters use the same line format:
[YYYY-MM-DD HH:MM:SS] Level: message
If you pass ['trace' => $trace], the trace is appended on the next line before the final newline.
If you pass an array message, the package JSON-encodes it with pretty printing before writing.