- Added addTags and setTags methods to change a TagProcessor
- Added automatic creation of directories if they are missing for a StreamHandler to open a log file
- Added retry functionality to Loggly, Cube and Mandrill handlers so they retry up to 5 times in case of network failure
- Fixed process exit code being incorrectly reset to 0 if ErrorHandler::registerExceptionHandler was used
- Fixed HTML/JS escaping in BrowserConsoleHandler
- Fixed JSON encoding errors being silently suppressed (PHP 5.5+ only)
- Added PHPConsoleHandler to send record to Chrome's PHP Console extension and library
- Added support for objects implementing __toString in the NormalizerFormatter
- Added support for HipChat's v2 API in HipChatHandler
- Added Logger::setTimezone() to initialize the timezone monolog should use in case date.timezone isn't correct for your app
- Added an option to send formatted message instead of the raw record on PushoverHandler via ->useFormattedMessage(true)
- Fixed curl errors being silently suppressed
- Fixed regression in HipChat requiring a new token to be created
- Added Registry::hasLogger to check for the presence of a logger instance
- Added context.user support to RavenHandler
- Added HipChat API v2 support in the HipChatHandler
- Added NativeMailerHandler::addParameter to pass params to the mail() process
- Added context data to SlackHandler when $includeContextAndExtra is true
- Added ability to customize the Swift_Message per-email in SwiftMailerHandler
- Fixed SwiftMailerHandler to lazily create message instances if a callback is provided
- Fixed serialization of INF and NaN values in Normalizer and LineFormatter
- Break: HandlerInterface::isHandling now receives a partial record containing only a level key. This was always the intent and does not break any Monolog handler but is strictly speaking a BC break and you should check if you relied on any other field in your own handlers.
- Added PsrHandler to forward records to another PSR-3 logger
- Added SamplingHandler to wrap around a handler and include only every Nth record
- Added MongoDBFormatter to support better storage with MongoDBHandler (it must be enabled manually for now)
- Added exception codes in the output of most formatters
- Added LineFormatter::includeStacktraces to enable exception stack traces in logs (uses more than one line)
- Added $useShortAttachment to SlackHandler to minify attachment size and $includeExtra to append extra data
- Added $host to HipChatHandler for users of private instances
- Added $transactionName to NewRelicHandler and support for a transaction_name context value
- Fixed MandrillHandler to avoid outputing API call responses
- Fixed some non-standard behaviors in SyslogUdpHandler
- Break: The NewRelicHandler extra and context data are now prefixed with extra_ and context_ to avoid clashes. Watch out if you have scripts reading those from the API and rely on names
- Added WhatFailureGroupHandler to suppress any exception coming from the wrapped handlers and avoid chain failures if a logging service fails
- Added MandrillHandler to send emails via the Mandrillapp.com API
- Added SlackHandler to log records to a Slack.com account
- Added FleepHookHandler to log records to a Fleep.io account
- Added LogglyHandler::addTag to allow adding tags to an existing handler
- Added $ignoreEmptyContextAndExtra to LineFormatter to avoid empty [] at the end
- Added $useLocking to StreamHandler and RotatingFileHandler to enable flock() while writing
- Added support for PhpAmqpLib in the AmqpHandler
- Added FingersCrossedHandler::clear and BufferHandler::clear to reset them between batches in long running jobs
- Added support for adding extra fields from $_SERVER in the WebProcessor
- Fixed support for non-string values in PrsLogMessageProcessor
- Fixed SwiftMailer messages being sent with the wrong date in long running scripts
- Fixed minor PHP 5.6 compatibility issues
- Fixed BufferHandler::close being called twice
- Added Logger::getHandlers() and Logger::getProcessors() methods
- Added $passthruLevel argument to FingersCrossedHandler to let it always pass some records through even if the trigger level is not reached
- Added support for extra data in NewRelicHandler
- Added $expandNewlines flag to the ErrorLogHandler to create multiple log entries when a message has multiple lines
- Fixed regression in RotatingFileHandler file permissions
- Fixed initialization of the BufferHandler to make sure it gets flushed after receiving records
- Fixed ChromePHPHandler and FirePHPHandler's activation strategies to be more conservative
- Added LogEntriesHandler to send logs to a LogEntries account
- Added $filePermissions to tweak file mode on StreamHandler and RotatingFileHandler
- Added $useFormatting flag to MemoryProcessor to make it send raw data in bytes
- Added support for table formatting in FirePHPHandler via the table context key
- Added a TagProcessor to add tags to records, and support for tags in RavenHandler
- Added $appendNewline flag to the JsonFormatter to enable using it when logging to files
- Added sound support to the PushoverHandler
- Fixed multi-threading support in StreamHandler
- Fixed empty headers issue when ChromePHPHandler received no records
- Fixed default format of the ErrorLogHandler
- Break: the LineFormatter now strips newlines by default because this was a bug, set $allowInlineLineBreaks to true if you need them
- Added BrowserConsoleHandler to send logs to any browser's console via console.log() injection in the output
- Added FilterHandler to filter records and only allow those of a given list of levels through to the wrapped handler
- Added FlowdockHandler to send logs to a Flowdock account
- Added RollbarHandler to send logs to a Rollbar account
- Added HtmlFormatter to send prettier log emails with colors for each log level
- Added GitProcessor to add the current branch/commit to extra record data
- Added a Monolog\Registry class to allow easier global access to pre-configured loggers
- Added support for the new official graylog2/gelf-php lib for GelfHandler, upgrade if you can by replacing the mlehner/gelf-php requirement
- Added support for HHVM
- Added support for Loggly batch uploads
- Added support for tweaking the content type and encoding in NativeMailerHandler
- Added $skipClassesPartials to tweak the ignored classes in the IntrospectionProcessor
- Fixed batch request support in GelfHandler
- Added ElasticSearchHandler to send logs to an Elastic Search server
- Added DynamoDbHandler and ScalarFormatter to send logs to Amazon's Dynamo DB
- Added SyslogUdpHandler to send logs to a remote syslogd server
- Added LogglyHandler to send logs to a Loggly account
- Added $level to IntrospectionProcessor so it only adds backtraces when needed
- Added $version to LogstashFormatter to allow using the new v1 Logstash format
- Added $appName to NewRelicHandler
- Added configuration of Pushover notification retries/expiry
- Added $maxColumnWidth to NativeMailerHandler to change the 70 chars default
- Added chainability to most setters for all handlers
- Fixed RavenHandler batch processing so it takes the message from the record with highest priority
- Fixed HipChatHandler batch processing so it sends all messages at once
- Fixed issues with eAccelerator
- Fixed and improved many small things
- Added HipChatHandler to send logs to a HipChat chat room
- Added ErrorLogHandler to send logs to PHP's error_log function
- Added NewRelicHandler to send logs to NewRelic's service
- Added Monolog\ErrorHandler helper class to register a Logger as exception/error/fatal handler
- Added ChannelLevelActivationStrategy for the FingersCrossedHandler to customize levels by channel
- Added stack traces output when normalizing exceptions (json output & co)
- Added Monolog\Logger::API constant (currently 1)
- Added support for ChromePHP's v4.0 extension
- Added support for message priorities in PushoverHandler, see $highPriorityLevel and $emergencyLevel
- Added support for sending messages to multiple users at once with the PushoverHandler
- Fixed RavenHandler's support for batch sending of messages (when behind a Buffer or FingersCrossedHandler)
- Fixed normalization of Traversables with very large data sets, only the first 1000 items are shown now
- Fixed issue in RotatingFileHandler when an open_basedir restriction is active
- Fixed minor issues in RavenHandler and bumped the API to Raven 0.5.0
- Fixed SyslogHandler issue when many were used concurrently with different facilities
- Added ProcessIdProcessor to inject the PID in log records
- Added UidProcessor to inject a unique identifier to all log records of one request/run
- Added support for previous exceptions in the LineFormatter exception serialization
- Added Monolog\Logger::getLevels() to get all available levels
- Fixed ChromePHPHandler so it avoids sending headers larger than Chrome can handle
- Fixed exception formatting in the LineFormatter to be more minimalistic
- Fixed RavenHandler's handling of context/extra data, requires Raven client >0.1.0
- Fixed log rotation in RotatingFileHandler to work with long running scripts spanning multiple days
- Fixed WebProcessor array access so it checks for data presence
- Fixed Buffer, Group and FingersCrossed handlers to make use of their processors
- Added RedisHandler to log to Redis via the Predis library or the phpredis extension
- Added ZendMonitorHandler to log to the Zend Server monitor
- Added the possibility to pass arrays of handlers and processors directly in the Logger constructor
- Added
$useSSL
option to the PushoverHandler which is enabled by default - Fixed ChromePHPHandler and FirePHPHandler issue when multiple instances are used simultaneously
- Fixed header injection capability in the NativeMailHandler
- Fixed LogstashFormatter to be usable with stream handlers
- Fixed GelfMessageFormatter levels on Windows
- Added PSR-3 compliance, the
Monolog\Logger
class is now an instance ofPsr\Log\LoggerInterface
- Added PsrLogMessageProcessor that you can selectively enable for full PSR-3 compliance
- Added LogstashFormatter (combine with SocketHandler or StreamHandler to send logs to Logstash)
- Added PushoverHandler to send mobile notifications
- Added CouchDBHandler and DoctrineCouchDBHandler
- Added RavenHandler to send data to Sentry servers
- Added support for the new MongoClient class in MongoDBHandler
- Added microsecond precision to log records' timestamps
- Added
$flushOnOverflow
param to BufferHandler to flush by batches instead of losing the oldest entries - Fixed normalization of objects with cyclic references
- Added new $logopts arg to SyslogHandler to provide custom openlog options
- Fixed fatal error in SyslogHandler
- Added AmqpHandler (for use with AMQP servers)
- Added CubeHandler
- Added NativeMailerHandler::addHeader() to send custom headers in mails
- Added the possibility to specify more than one recipient in NativeMailerHandler
- Added the possibility to specify float timeouts in SocketHandler
- Added NOTICE and EMERGENCY levels to conform with RFC 5424
- Fixed the log records to use the php default timezone instead of UTC
- Fixed BufferHandler not being flushed properly on PHP fatal errors
- Fixed normalization of exotic resource types
- Fixed the default format of the SyslogHandler to avoid duplicating datetimes in syslog
- Added Monolog\Logger::isHandling() to check if a handler will handle the given log level
- Added ChromePHPHandler
- Added MongoDBHandler
- Added GelfHandler (for use with Graylog2 servers)
- Added SocketHandler (for use with syslog-ng for example)
- Added NormalizerFormatter
- Added the possibility to change the activation strategy of the FingersCrossedHandler
- Added possibility to show microseconds in logs
- Added
server
andreferer
to WebProcessor output
- Fixed bug in IE with large response headers and FirePHPHandler
- Added MemoryPeakUsageProcessor and MemoryUsageProcessor
- Added Monolog\Logger::getName() to get a logger's channel name
- Added IntrospectionProcessor to get info from where the logger was called
- Fixed WebProcessor in CLI
- Initial release