87 lines
2.1 KiB
PHP
87 lines
2.1 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Monolog package.
|
|
*
|
|
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Monolog\Formatter;
|
|
|
|
/**
|
|
* Class FluentdFormatter
|
|
*
|
|
* Serializes a log message to Fluentd unix socket protocol
|
|
*
|
|
* Fluentd config:
|
|
*
|
|
* <source>
|
|
* type unix
|
|
* path /var/run/td-agent/td-agent.sock
|
|
* </source>
|
|
*
|
|
* Monolog setup:
|
|
*
|
|
* $logger = new Monolog\Logger('fluent.tag');
|
|
* $fluentHandler = new Monolog\Handler\SocketHandler('unix:///var/run/td-agent/td-agent.sock');
|
|
* $fluentHandler->setFormatter(new Monolog\Formatter\FluentdFormatter());
|
|
* $logger->pushHandler($fluentHandler);
|
|
*
|
|
* @author Andrius Putna <fordnox@gmail.com>
|
|
*/
|
|
class FluentdFormatter implements FormatterInterface
|
|
{
|
|
/**
|
|
* @var bool $levelTag should message level be a part of the fluentd tag
|
|
*/
|
|
protected $levelTag = false;
|
|
|
|
public function __construct($levelTag = false)
|
|
{
|
|
if (!function_exists('json_encode')) {
|
|
throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter');
|
|
}
|
|
|
|
$this->levelTag = (bool) $levelTag;
|
|
}
|
|
|
|
public function isUsingLevelsInTag()
|
|
{
|
|
return $this->levelTag;
|
|
}
|
|
|
|
public function format(array $record)
|
|
{
|
|
$tag = $record['channel'];
|
|
if ($this->levelTag) {
|
|
$tag .= '.' . strtolower($record['level_name']);
|
|
}
|
|
|
|
$message = array(
|
|
'message' => $record['message'],
|
|
'context' => $record['context'],
|
|
'extra' => $record['extra'],
|
|
);
|
|
|
|
if (!$this->levelTag) {
|
|
$message['level'] = $record['level'];
|
|
$message['level_name'] = $record['level_name'];
|
|
}
|
|
|
|
return json_encode(array($tag, $record['datetime']->getTimestamp(), $message));
|
|
}
|
|
|
|
public function formatBatch(array $records)
|
|
{
|
|
$message = '';
|
|
foreach ($records as $record) {
|
|
$message .= $this->format($record);
|
|
}
|
|
|
|
return $message;
|
|
}
|
|
}
|