mirror of
https://github.com/Seldaek/monolog.git
synced 2025-10-21 16:46:11 +02:00
HipChatHandler: combine batch records and send as one
This commit is contained in:
@@ -150,4 +150,70 @@ class HipChatHandler extends SocketHandler
|
||||
$this->closeSocket();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function handleBatch(array $records)
|
||||
{
|
||||
if (count($records) == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$batchRecord = $this->combineRecords($records);
|
||||
|
||||
if (!$this->isHandling($batchRecord)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->write($batchRecord);
|
||||
|
||||
return false === $this->bubble;
|
||||
}
|
||||
|
||||
/**
|
||||
* Combines multiple records into one. Error level of the combined record
|
||||
* will be the highest level from the given records. Datetime will be taken
|
||||
* from the first record.
|
||||
*
|
||||
* @param $records
|
||||
* @return array
|
||||
*/
|
||||
private function combineRecords($records)
|
||||
{
|
||||
$messages = array();
|
||||
$formattedMessages = array();
|
||||
$level = 0;
|
||||
$levelName = null;
|
||||
$datetime = null;
|
||||
|
||||
foreach ($records as $record) {
|
||||
|
||||
$record = $this->processRecord($record);
|
||||
$record['formatted'] = $this->getFormatter()->format($record);
|
||||
|
||||
$messages[] = $record['message'];
|
||||
$formattedMessages[] = $record['formatted'];
|
||||
|
||||
if ($record['level'] > $level) {
|
||||
$level = $record['level'];
|
||||
$levelName = $record['level_name'];
|
||||
}
|
||||
|
||||
if (null == $datetime) {
|
||||
$datetime = $record['datetime'];
|
||||
}
|
||||
}
|
||||
|
||||
$batchRecord = array(
|
||||
'message' => implode(PHP_EOL, $messages),
|
||||
'formatted' => implode('', $formattedMessages),
|
||||
'level' => $level,
|
||||
'level_name' => $levelName,
|
||||
'datetime' => $datetime,
|
||||
'context' => array(),
|
||||
'extra' => array(),
|
||||
);
|
||||
|
||||
return $batchRecord;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user