1### 1.24.0 (2018-11-05)
2
3  * Added a `ResettableInterface` in order to reset/reset/clear/flush handlers and processors
4  * Added a `ProcessorInterface` as an optional way to label a class as being a processor (mostly useful for autowiring dependency containers)
5  * Added a way to log signals being received using Monolog\SignalHandler
6  * Added ability to customize error handling at the Logger level using Logger::setExceptionHandler
7  * Added InsightOpsHandler to migrate users of the LogEntriesHandler
8  * Added protection to NormalizerHandler against circular and very deep structures, it now stops normalizing at a depth of 9
9  * Added capture of stack traces to ErrorHandler when logging PHP errors
10  * Added RavenHandler support for a `contexts` context or extra key to forward that to Sentry's contexts
11  * Added forwarding of context info to FluentdFormatter
12  * Added SocketHandler::setChunkSize to override the default chunk size in case you must send large log lines to rsyslog for example
13  * Added ability to extend/override BrowserConsoleHandler
14  * Added SlackWebhookHandler::getWebhookUrl and SlackHandler::getToken to enable class extensibility
15  * Added SwiftMailerHandler::getSubjectFormatter to enable class extensibility
16  * Dropped official support for HHVM in test builds
17  * Fixed normalization of exception traces when call_user_func is used to avoid serializing objects and the data they contain
18  * Fixed naming of fields in Slack handler, all field names are now capitalized in all cases
19  * Fixed HipChatHandler bug where slack dropped messages randomly
20  * Fixed normalization of objects in Slack handlers
21  * Fixed support for PHP7's Throwable in NewRelicHandler
22  * Fixed race bug when StreamHandler sometimes incorrectly reported it failed to create a directory
23  * Fixed table row styling issues in HtmlFormatter
24  * Fixed RavenHandler dropping the message when logging exception
25  * Fixed WhatFailureGroupHandler skipping processors when using handleBatch
26    and implement it where possible
27  * Fixed display of anonymous class names
28
29### 1.23.0 (2017-06-19)
30
31  * Improved SyslogUdpHandler's support for RFC5424 and added optional `$ident` argument
32  * Fixed GelfHandler truncation to be per field and not per message
33  * Fixed compatibility issue with PHP <5.3.6
34  * Fixed support for headless Chrome in ChromePHPHandler
35  * Fixed support for latest Aws SDK in DynamoDbHandler
36  * Fixed support for SwiftMailer 6.0+ in SwiftMailerHandler
37
38### 1.22.1 (2017-03-13)
39
40  * Fixed lots of minor issues in the new Slack integrations
41  * Fixed support for allowInlineLineBreaks in LineFormatter when formatting exception backtraces
42
43### 1.22.0 (2016-11-26)
44
45  * Added SlackbotHandler and SlackWebhookHandler to set up Slack integration more easily
46  * Added MercurialProcessor to add mercurial revision and branch names to log records
47  * Added support for AWS SDK v3 in DynamoDbHandler
48  * Fixed fatal errors occuring when normalizing generators that have been fully consumed
49  * Fixed RollbarHandler to include a level (rollbar level), monolog_level (original name), channel and datetime (unix)
50  * Fixed RollbarHandler not flushing records automatically, calling close() explicitly is not necessary anymore
51  * Fixed SyslogUdpHandler to avoid sending empty frames
52  * Fixed a few PHP 7.0 and 7.1 compatibility issues
53
54### 1.21.0 (2016-07-29)
55
56  * Break: Reverted the addition of $context when the ErrorHandler handles regular php errors from 1.20.0 as it was causing issues
57  * Added support for more formats in RotatingFileHandler::setFilenameFormat as long as they have Y, m and d in order
58  * Added ability to format the main line of text the SlackHandler sends by explictly setting a formatter on the handler
59  * Added information about SoapFault instances in NormalizerFormatter
60  * Added $handleOnlyReportedErrors option on ErrorHandler::registerErrorHandler (default true) to allow logging of all errors no matter the error_reporting level
61
62### 1.20.0 (2016-07-02)
63
64  * Added FingersCrossedHandler::activate() to manually trigger the handler regardless of the activation policy
65  * Added StreamHandler::getUrl to retrieve the stream's URL
66  * Added ability to override addRow/addTitle in HtmlFormatter
67  * Added the $context to context information when the ErrorHandler handles a regular php error
68  * Deprecated RotatingFileHandler::setFilenameFormat to only support 3 formats: Y, Y-m and Y-m-d
69  * Fixed WhatFailureGroupHandler to work with PHP7 throwables
70  * Fixed a few minor bugs
71
72### 1.19.0 (2016-04-12)
73
74  * Break: StreamHandler will not close streams automatically that it does not own. If you pass in a stream (not a path/url), then it will not close it for you. You can retrieve those using getStream() if needed
75  * Added DeduplicationHandler to remove duplicate records from notifications across multiple requests, useful for email or other notifications on errors
76  * Added ability to use `%message%` and other LineFormatter replacements in the subject line of emails sent with NativeMailHandler and SwiftMailerHandler
77  * Fixed HipChatHandler handling of long messages
78
79### 1.18.2 (2016-04-02)
80
81  * Fixed ElasticaFormatter to use more precise dates
82  * Fixed GelfMessageFormatter sending too long messages
83
84### 1.18.1 (2016-03-13)
85
86  * Fixed SlackHandler bug where slack dropped messages randomly
87  * Fixed RedisHandler issue when using with the PHPRedis extension
88  * Fixed AmqpHandler content-type being incorrectly set when using with the AMQP extension
89  * Fixed BrowserConsoleHandler regression
90
91### 1.18.0 (2016-03-01)
92
93  * Added optional reduction of timestamp precision via `Logger->useMicrosecondTimestamps(false)`, disabling it gets you a bit of performance boost but reduces the precision to the second instead of microsecond
94  * Added possibility to skip some extra stack frames in IntrospectionProcessor if you have some library wrapping Monolog that is always adding frames
95  * Added `Logger->withName` to clone a logger (keeping all handlers) with a new name
96  * Added FluentdFormatter for the Fluentd unix socket protocol
97  * Added HandlerWrapper base class to ease the creation of handler wrappers, just extend it and override as needed
98  * Added support for replacing context sub-keys using `%context.*%` in LineFormatter
99  * Added support for `payload` context value in RollbarHandler
100  * Added setRelease to RavenHandler to describe the application version, sent with every log
101  * Added support for `fingerprint` context value in RavenHandler
102  * Fixed JSON encoding errors that would gobble up the whole log record, we now handle those more gracefully by dropping chars as needed
103  * Fixed write timeouts in SocketHandler and derivatives, set to 10sec by default, lower it with `setWritingTimeout()`
104  * Fixed PHP7 compatibility with regard to Exception/Throwable handling in a few places
105
106### 1.17.2 (2015-10-14)
107
108  * Fixed ErrorHandler compatibility with non-Monolog PSR-3 loggers
109  * Fixed SlackHandler handling to use slack functionalities better
110  * Fixed SwiftMailerHandler bug when sending multiple emails they all had the same id
111  * Fixed 5.3 compatibility regression
112
113### 1.17.1 (2015-08-31)
114
115  * Fixed RollbarHandler triggering PHP notices
116
117### 1.17.0 (2015-08-30)
118
119  * Added support for `checksum` and `release` context/extra values in RavenHandler
120  * Added better support for exceptions in RollbarHandler
121  * Added UidProcessor::getUid
122  * Added support for showing the resource type in NormalizedFormatter
123  * Fixed IntrospectionProcessor triggering PHP notices
124
125### 1.16.0 (2015-08-09)
126
127  * Added IFTTTHandler to notify ifttt.com triggers
128  * Added Logger::setHandlers() to allow setting/replacing all handlers
129  * Added $capSize in RedisHandler to cap the log size
130  * Fixed StreamHandler creation of directory to only trigger when the first log write happens
131  * Fixed bug in the handling of curl failures
132  * Fixed duplicate logging of fatal errors when both error and fatal error handlers are registered in monolog's ErrorHandler
133  * Fixed missing fatal errors records with handlers that need to be closed to flush log records
134  * Fixed TagProcessor::addTags support for associative arrays
135
136### 1.15.0 (2015-07-12)
137
138  * Added addTags and setTags methods to change a TagProcessor
139  * Added automatic creation of directories if they are missing for a StreamHandler to open a log file
140  * Added retry functionality to Loggly, Cube and Mandrill handlers so they retry up to 5 times in case of network failure
141  * Fixed process exit code being incorrectly reset to 0 if ErrorHandler::registerExceptionHandler was used
142  * Fixed HTML/JS escaping in BrowserConsoleHandler
143  * Fixed JSON encoding errors being silently suppressed (PHP 5.5+ only)
144
145### 1.14.0 (2015-06-19)
146
147  * Added PHPConsoleHandler to send record to Chrome's PHP Console extension and library
148  * Added support for objects implementing __toString in the NormalizerFormatter
149  * Added support for HipChat's v2 API in HipChatHandler
150  * Added Logger::setTimezone() to initialize the timezone monolog should use in case date.timezone isn't correct for your app
151  * Added an option to send formatted message instead of the raw record on PushoverHandler via ->useFormattedMessage(true)
152  * Fixed curl errors being silently suppressed
153
154### 1.13.1 (2015-03-09)
155
156  * Fixed regression in HipChat requiring a new token to be created
157
158### 1.13.0 (2015-03-05)
159
160  * Added Registry::hasLogger to check for the presence of a logger instance
161  * Added context.user support to RavenHandler
162  * Added HipChat API v2 support in the HipChatHandler
163  * Added NativeMailerHandler::addParameter to pass params to the mail() process
164  * Added context data to SlackHandler when $includeContextAndExtra is true
165  * Added ability to customize the Swift_Message per-email in SwiftMailerHandler
166  * Fixed SwiftMailerHandler to lazily create message instances if a callback is provided
167  * Fixed serialization of INF and NaN values in Normalizer and LineFormatter
168
169### 1.12.0 (2014-12-29)
170
171  * 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.
172  * Added PsrHandler to forward records to another PSR-3 logger
173  * Added SamplingHandler to wrap around a handler and include only every Nth record
174  * Added MongoDBFormatter to support better storage with MongoDBHandler (it must be enabled manually for now)
175  * Added exception codes in the output of most formatters
176  * Added LineFormatter::includeStacktraces to enable exception stack traces in logs (uses more than one line)
177  * Added $useShortAttachment to SlackHandler to minify attachment size and $includeExtra to append extra data
178  * Added $host to HipChatHandler for users of private instances
179  * Added $transactionName to NewRelicHandler and support for a transaction_name context value
180  * Fixed MandrillHandler to avoid outputing API call responses
181  * Fixed some non-standard behaviors in SyslogUdpHandler
182
183### 1.11.0 (2014-09-30)
184
185  * 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
186  * Added WhatFailureGroupHandler to suppress any exception coming from the wrapped handlers and avoid chain failures if a logging service fails
187  * Added MandrillHandler to send emails via the Mandrillapp.com API
188  * Added SlackHandler to log records to a Slack.com account
189  * Added FleepHookHandler to log records to a Fleep.io account
190  * Added LogglyHandler::addTag to allow adding tags to an existing handler
191  * Added $ignoreEmptyContextAndExtra to LineFormatter to avoid empty [] at the end
192  * Added $useLocking to StreamHandler and RotatingFileHandler to enable flock() while writing
193  * Added support for PhpAmqpLib in the AmqpHandler
194  * Added FingersCrossedHandler::clear and BufferHandler::clear to reset them between batches in long running jobs
195  * Added support for adding extra fields from $_SERVER in the WebProcessor
196  * Fixed support for non-string values in PrsLogMessageProcessor
197  * Fixed SwiftMailer messages being sent with the wrong date in long running scripts
198  * Fixed minor PHP 5.6 compatibility issues
199  * Fixed BufferHandler::close being called twice
200
201### 1.10.0 (2014-06-04)
202
203  * Added Logger::getHandlers() and Logger::getProcessors() methods
204  * Added $passthruLevel argument to FingersCrossedHandler to let it always pass some records through even if the trigger level is not reached
205  * Added support for extra data in NewRelicHandler
206  * Added $expandNewlines flag to the ErrorLogHandler to create multiple log entries when a message has multiple lines
207
208### 1.9.1 (2014-04-24)
209
210  * Fixed regression in RotatingFileHandler file permissions
211  * Fixed initialization of the BufferHandler to make sure it gets flushed after receiving records
212  * Fixed ChromePHPHandler and FirePHPHandler's activation strategies to be more conservative
213
214### 1.9.0 (2014-04-20)
215
216  * Added LogEntriesHandler to send logs to a LogEntries account
217  * Added $filePermissions to tweak file mode on StreamHandler and RotatingFileHandler
218  * Added $useFormatting flag to MemoryProcessor to make it send raw data in bytes
219  * Added support for table formatting in FirePHPHandler via the table context key
220  * Added a TagProcessor to add tags to records, and support for tags in RavenHandler
221  * Added $appendNewline flag to the JsonFormatter to enable using it when logging to files
222  * Added sound support to the PushoverHandler
223  * Fixed multi-threading support in StreamHandler
224  * Fixed empty headers issue when ChromePHPHandler received no records
225  * Fixed default format of the ErrorLogHandler
226
227### 1.8.0 (2014-03-23)
228
229  * Break: the LineFormatter now strips newlines by default because this was a bug, set $allowInlineLineBreaks to true if you need them
230  * Added BrowserConsoleHandler to send logs to any browser's console via console.log() injection in the output
231  * Added FilterHandler to filter records and only allow those of a given list of levels through to the wrapped handler
232  * Added FlowdockHandler to send logs to a Flowdock account
233  * Added RollbarHandler to send logs to a Rollbar account
234  * Added HtmlFormatter to send prettier log emails with colors for each log level
235  * Added GitProcessor to add the current branch/commit to extra record data
236  * Added a Monolog\Registry class to allow easier global access to pre-configured loggers
237  * Added support for the new official graylog2/gelf-php lib for GelfHandler, upgrade if you can by replacing the mlehner/gelf-php requirement
238  * Added support for HHVM
239  * Added support for Loggly batch uploads
240  * Added support for tweaking the content type and encoding in NativeMailerHandler
241  * Added $skipClassesPartials to tweak the ignored classes in the IntrospectionProcessor
242  * Fixed batch request support in GelfHandler
243
244### 1.7.0 (2013-11-14)
245
246  * Added ElasticSearchHandler to send logs to an Elastic Search server
247  * Added DynamoDbHandler and ScalarFormatter to send logs to Amazon's Dynamo DB
248  * Added SyslogUdpHandler to send logs to a remote syslogd server
249  * Added LogglyHandler to send logs to a Loggly account
250  * Added $level to IntrospectionProcessor so it only adds backtraces when needed
251  * Added $version to LogstashFormatter to allow using the new v1 Logstash format
252  * Added $appName to NewRelicHandler
253  * Added configuration of Pushover notification retries/expiry
254  * Added $maxColumnWidth to NativeMailerHandler to change the 70 chars default
255  * Added chainability to most setters for all handlers
256  * Fixed RavenHandler batch processing so it takes the message from the record with highest priority
257  * Fixed HipChatHandler batch processing so it sends all messages at once
258  * Fixed issues with eAccelerator
259  * Fixed and improved many small things
260
261### 1.6.0 (2013-07-29)
262
263  * Added HipChatHandler to send logs to a HipChat chat room
264  * Added ErrorLogHandler to send logs to PHP's error_log function
265  * Added NewRelicHandler to send logs to NewRelic's service
266  * Added Monolog\ErrorHandler helper class to register a Logger as exception/error/fatal handler
267  * Added ChannelLevelActivationStrategy for the FingersCrossedHandler to customize levels by channel
268  * Added stack traces output when normalizing exceptions (json output & co)
269  * Added Monolog\Logger::API constant (currently 1)
270  * Added support for ChromePHP's v4.0 extension
271  * Added support for message priorities in PushoverHandler, see $highPriorityLevel and $emergencyLevel
272  * Added support for sending messages to multiple users at once with the PushoverHandler
273  * Fixed RavenHandler's support for batch sending of messages (when behind a Buffer or FingersCrossedHandler)
274  * Fixed normalization of Traversables with very large data sets, only the first 1000 items are shown now
275  * Fixed issue in RotatingFileHandler when an open_basedir restriction is active
276  * Fixed minor issues in RavenHandler and bumped the API to Raven 0.5.0
277  * Fixed SyslogHandler issue when many were used concurrently with different facilities
278
279### 1.5.0 (2013-04-23)
280
281  * Added ProcessIdProcessor to inject the PID in log records
282  * Added UidProcessor to inject a unique identifier to all log records of one request/run
283  * Added support for previous exceptions in the LineFormatter exception serialization
284  * Added Monolog\Logger::getLevels() to get all available levels
285  * Fixed ChromePHPHandler so it avoids sending headers larger than Chrome can handle
286
287### 1.4.1 (2013-04-01)
288
289  * Fixed exception formatting in the LineFormatter to be more minimalistic
290  * Fixed RavenHandler's handling of context/extra data, requires Raven client >0.1.0
291  * Fixed log rotation in RotatingFileHandler to work with long running scripts spanning multiple days
292  * Fixed WebProcessor array access so it checks for data presence
293  * Fixed Buffer, Group and FingersCrossed handlers to make use of their processors
294
295### 1.4.0 (2013-02-13)
296
297  * Added RedisHandler to log to Redis via the Predis library or the phpredis extension
298  * Added ZendMonitorHandler to log to the Zend Server monitor
299  * Added the possibility to pass arrays of handlers and processors directly in the Logger constructor
300  * Added `$useSSL` option to the PushoverHandler which is enabled by default
301  * Fixed ChromePHPHandler and FirePHPHandler issue when multiple instances are used simultaneously
302  * Fixed header injection capability in the NativeMailHandler
303
304### 1.3.1 (2013-01-11)
305
306  * Fixed LogstashFormatter to be usable with stream handlers
307  * Fixed GelfMessageFormatter levels on Windows
308
309### 1.3.0 (2013-01-08)
310
311  * Added PSR-3 compliance, the `Monolog\Logger` class is now an instance of `Psr\Log\LoggerInterface`
312  * Added PsrLogMessageProcessor that you can selectively enable for full PSR-3 compliance
313  * Added LogstashFormatter (combine with SocketHandler or StreamHandler to send logs to Logstash)
314  * Added PushoverHandler to send mobile notifications
315  * Added CouchDBHandler and DoctrineCouchDBHandler
316  * Added RavenHandler to send data to Sentry servers
317  * Added support for the new MongoClient class in MongoDBHandler
318  * Added microsecond precision to log records' timestamps
319  * Added `$flushOnOverflow` param to BufferHandler to flush by batches instead of losing
320    the oldest entries
321  * Fixed normalization of objects with cyclic references
322
323### 1.2.1 (2012-08-29)
324
325  * Added new $logopts arg to SyslogHandler to provide custom openlog options
326  * Fixed fatal error in SyslogHandler
327
328### 1.2.0 (2012-08-18)
329
330  * Added AmqpHandler (for use with AMQP servers)
331  * Added CubeHandler
332  * Added NativeMailerHandler::addHeader() to send custom headers in mails
333  * Added the possibility to specify more than one recipient in NativeMailerHandler
334  * Added the possibility to specify float timeouts in SocketHandler
335  * Added NOTICE and EMERGENCY levels to conform with RFC 5424
336  * Fixed the log records to use the php default timezone instead of UTC
337  * Fixed BufferHandler not being flushed properly on PHP fatal errors
338  * Fixed normalization of exotic resource types
339  * Fixed the default format of the SyslogHandler to avoid duplicating datetimes in syslog
340
341### 1.1.0 (2012-04-23)
342
343  * Added Monolog\Logger::isHandling() to check if a handler will
344    handle the given log level
345  * Added ChromePHPHandler
346  * Added MongoDBHandler
347  * Added GelfHandler (for use with Graylog2 servers)
348  * Added SocketHandler (for use with syslog-ng for example)
349  * Added NormalizerFormatter
350  * Added the possibility to change the activation strategy of the FingersCrossedHandler
351  * Added possibility to show microseconds in logs
352  * Added `server` and `referer` to WebProcessor output
353
354### 1.0.2 (2011-10-24)
355
356  * Fixed bug in IE with large response headers and FirePHPHandler
357
358### 1.0.1 (2011-08-25)
359
360  * Added MemoryPeakUsageProcessor and MemoryUsageProcessor
361  * Added Monolog\Logger::getName() to get a logger's channel name
362
363### 1.0.0 (2011-07-06)
364
365  * Added IntrospectionProcessor to get info from where the logger was called
366  * Fixed WebProcessor in CLI
367
368### 1.0.0-RC1 (2011-07-01)
369
370  * Initial release
371