1
0
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:
pkraeutli
2013-10-16 10:27:55 +02:00
parent 8e5a671eef
commit f1af2c484a
2 changed files with 115 additions and 0 deletions

View File

@@ -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;
}
}