4 * This file is part of the Monolog package.
6 * (c) Jordi Boggiano <j.boggiano@seld.be>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Monolog\Formatter;
15 * Class FluentdFormatter
17 * Serializes a log message to Fluentd unix socket protocol
23 * path /var/run/td-agent/td-agent.sock
28 * $logger = new Monolog\Logger('fluent.tag');
29 * $fluentHandler = new Monolog\Handler\SocketHandler('unix:///var/run/td-agent/td-agent.sock');
30 * $fluentHandler->setFormatter(new Monolog\Formatter\FluentdFormatter());
31 * $logger->pushHandler($fluentHandler);
33 * @author Andrius Putna <fordnox@gmail.com>
35 class FluentdFormatter implements FormatterInterface
38 * @var bool $levelTag should message level be a part of the fluentd tag
40 protected $levelTag = false;
42 public function __construct($levelTag = false)
44 if (!function_exists('json_encode')) {
45 throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter');
48 $this->levelTag = (bool) $levelTag;
51 public function isUsingLevelsInTag()
53 return $this->levelTag;
56 public function format(array $record)
58 $tag = $record['channel'];
59 if ($this->levelTag) {
60 $tag .= '.' . strtolower($record['level_name']);
64 'message' => $record['message'],
65 'extra' => $record['extra'],
68 if (!$this->levelTag) {
69 $message['level'] = $record['level'];
70 $message['level_name'] = $record['level_name'];
73 return json_encode(array($tag, $record['datetime']->getTimestamp(), $message));
76 public function formatBatch(array $records)
79 foreach ($records as $record) {
80 $message .= $this->format($record);