6.9 KiB
4.0.0
Overall / notable changes:
- Monolog\DateTimeImmutable has been removed in favor of Monolog\JsonSerializableDateTimeImmutable.
3.0.0
Overall / notable changes:
- The minimum supported PHP version is now
8.1.0. Monolog\Logger::APIcan be used to distinguish between a Monolog3,2or1install when writing integration code.- Log records have been converted from an array to a
Monolog\LogRecordobject with public (and mostly readonly) properties. e.g. instead of doing$record['context']use$record->context. In formatters or handlers if you rather need an array to work with you can use$record->toArray()to get back a Monolog 1/2 style record array. This will contain the enum values instead of enum cases in thelevelandlevel_namekeys to be more backwards compatible and use simpler data types. FormatterInterface,HandlerInterface,ProcessorInterface, etc. changed to containLogRecord $recordinstead ofarray $recordparameter types. If you want to support multiple Monolog versions this should be possible by type-hinting nothing, orarray|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 aLogRecordreturn type even where it would be applicable, but if you only support Monolog 3 in integration code I would recommend you useLogRecordreturn types wherever fitting to ensure forward compatibility as it may be added in Monolog 4.- Log levels are now stored as an enum
Monolog\Level - 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
Logger::DEBUG,Logger::ERROR, etc. are now deprecated in favor of theLevelenum. e.g. instead ofLogger::WARNINGuseLevel::Warningif you need to pass the enum case to Monolog or one of its handlers, orLevel::Warning->valueif you need the integer value equal to whatLogger::WARNINGwas giving you.Logger::$levelshas been removed.Logger::getLevelshas been removed in favor ofMonolog\Level::VALUESorMonolog\Level::cases().setExceptionHandlernow requires aClosureinstance and not just anycallable.
HtmlFormatter
- If you redefined colors in the
$logLevelsproperty you must now override thegetLevelColormethod instead.
NormalizerFormatter
- A new
normalizeRecordmethod is available as an extension point which is called only when converting the LogRecord to an array. You may need this if you overrodeformatpreviously asparent::formatnow needs to receive a LogRecord still so you cannot modify it before.
AbstractSyslogHandler
- If you redefined syslog levels in the
$logLevelsproperty you must now override thetoSyslogPrioritymethod instead.
DynamoDbHandler
- Dropped support for AWS SDK v2
FilterHandler
- The factory callable to lazy load the nested handler must now be a
Closureinstance and not just acallable.
FingersCrossedHandler
- The factory callable to lazy load the nested handler must now be a
Closureinstance and not just acallable.
GelfHandler
- Dropped support for Gelf <1.1 and added support for graylog2/gelf-php v2.x. File, level and facility are now passed in as additional fields (#1664)[https://github.com/Seldaek/monolog/pull/1664].
RollbarHandler
- If you redefined rollbar levels in the
$logLevelsproperty you must now override thetoRollbarLevelmethod instead.
SamplingHandler
- The factory callable to lazy load the nested handler must now be a
Closureinstance and not just acallable.
SwiftMailerHandler
- Removed deprecated SwiftMailer handler, migrate to SymfonyMailerHandler instead.
ZendMonitorHandler
- If you redefined zend monitor levels in the
$levelMapproperty you must now override thetoZendMonitorLevelmethod instead.
ResettableInterface
reset()now requires a void return type.
2.0.0
-
Monolog\Logger::APIcan be used to distinguish between a Monolog1and2install of Monolog when writing integration code. -
Removed non-PSR-3 methods to add records, all the
add*(e.g.addWarning) methods as well asemerg,crit,errandwarn. -
DateTime are now formatted with a timezone and microseconds (unless disabled). Various formatters and log output might be affected, which may mess with log parsing in some cases.
-
The
datetimein every record array is now a DateTimeImmutable, not that you should have been modifying these anyway. -
The timezone is now set per Logger instance and not statically, either via ->setTimezone or passed in the constructor. Calls to Logger::setTimezone should be converted.
-
HandlerInterfacehas been split off and two new interfaces now exist for more granular controls:ProcessableHandlerInterfaceandFormattableHandlerInterface. Handlers not extendingAbstractHandlershould make sure to implement the relevant interfaces. -
HandlerInterfacenow requires theclosemethod to be implemented. This only impacts you if you implement the interface yourself, but you can extend the newMonolog\Handler\Handlerbase class too. -
There is no more default handler configured on empty Logger instances, if you were relying on that you will not get any output anymore, make sure to configure the handler you need.
LogglyFormatter
- The records'
datetimeis not sent anymore. Onlytimestampis sent to Loggly.
AmqpHandler
- Log levels are not shortened to 4 characters anymore. e.g. a warning record
will be sent using the
warning.channelrouting key instead ofwarn.channelas in 1.x. - The exchange name does not default to 'log' anymore, and it is completely ignored now for the AMQP extension users. Only PHPAmqpLib uses it if provided.
RotatingFileHandler
- The file name format must now contain
{date}and the date format must be set to one of the predefined FILE_PER_* constants to avoid issues with file rotation. SeesetFilenameFormat.
LogstashFormatter
- Removed Logstash V0 support
- Context/extra prefix has been removed in favor of letting users configure the exact key being sent
- Context/extra data are now sent as an object instead of single keys
HipChatHandler
- Removed deprecated HipChat handler, migrate to Slack and use SlackWebhookHandler or SlackHandler instead
SlackbotHandler
- Removed deprecated SlackbotHandler handler, use SlackWebhookHandler or SlackHandler instead
RavenHandler
- Removed deprecated RavenHandler handler, use sentry/sentry 2.x and their Sentry\Monolog\Handler instead
ElasticSearchHandler
- As support for the official Elasticsearch library was added, the former ElasticSearchHandler has been renamed to ElasticaHandler and the new one added as ElasticsearchHandler.