This is mostly a cleanup release offering stronger type guarantees for integrators with the
array->object/enum changes, but there is no big new feature for end users.
See UPGRADE notes for details on all breaking changes especially if you are extending/implementing Monolog classes/interfaces.
Noteworthy BC Breaks:
- The minimum supported PHP version is now
- Log records have been converted from an array to a
with public (and mostly readonly) properties. e.g. instead of doing
In formatters or handlers if you rather need an array to work with you can use
to get back a Monolog 1/2 style record array. This will contain the enum values instead of enum cases
level_namekeys to be more backwards compatible and use simpler data types.
ProcessorInterface, etc. changed to contain
array $recordparameter types. If you want to support multiple Monolog versions this should
be possible by type-hinting nothing, or
array|LogRecordif you support PHP 8.0+. You can then code
against the $record using Monolog 2 style as LogRecord implements ArrayAccess for BC.
The interfaces do not require a
LogRecordreturn type even where it would be applicable, but if you only
support Monolog 3 in integration code I would recommend you use
LogRecordreturn types wherever fitting
to ensure forward compatibility as it may be added in Monolog 4.
- Log levels are now stored as an enum
- Removed deprecated SwiftMailerHandler, migrate to SymfonyMailerHandler instead.
ResettableInterface::reset()now requires a void return type.
- All properties have had types added, which may require you to do so as well if you extended
a Monolog class and declared the same property.
Logger::ERROR, etc. are now deprecated in favor of the
e.g. instead of
Level::Warningif you need to pass the enum case
to Monolog or one of its handlers, or
Level::Warning->valueif you need the integer
value equal to what
Logger::WARNINGwas giving you.
Logger::getLevelName()is now deprecated.