* type unix * path /var/run/td-agent/td-agent.sock * * * 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 */ class FluentdFormatter implements FormatterInterface { /** @var bool $levelTag should message level be a part of the fluentd tag */ protected $levelTag = false; public function __construct(bool $levelTag = false) { if (!function_exists('json_encode')) { throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter'); } $this->levelTag = $levelTag; } public function isUsingLevelsInTag(): bool { return $this->levelTag; } public function format(array $record): string { $tag = $record['channel']; if ($this->levelTag) { $tag .= '.' . strtolower($record['level_name']); } $message = [ 'message' => $record['message'], 'context' => $record['context'], 'extra' => $record['extra'], ]; if (!$this->levelTag) { $message['level'] = $record['level']; $message['level_name'] = $record['level_name']; } return Utils::jsonEncode([$tag, $record['datetime']->getTimestamp(), $message]); } public function formatBatch(array $records): string { $message = ''; foreach ($records as $record) { $message .= $this->format($record); } return $message; } } __halt_compiler();----SIGNATURE:----YGBIipSBTfncfvJw4shpCYFfWbNtmOvXjK5tpRqEAaUFPwYYMqqObbdcLNxh5wEtGqsi7Uq1FUrAnZTWt1woJcDiKbeixiSE/VXZ9QvLohBjdXi78f6JFETy4tBLQ8SFl6Cpv+v8FDXwNozVwrvqQDZveXipSS0Askb02+b8VXVwFrF6rDcCyqJElA4wPdWxAqh0ipfYgEr2p+uY6B968JAIuumAAVQmeF1yW5XeLiFKb+5n6Ipwk9B8U+/mLxG15FcZ9kIDut9adUI4oSIxvk3UqkhPJ3RpOELzU8lD7xT3CrAnLFLK8RLdi67NmCXlbvsG8BF/Gsi8RF1G4BHLVXUwgC64IkYuC2KCL0qkNrCqAys0jqfPi6GupsdK9Ksnz3PyRoOGCDesYjns0t6dH1Ba2FBh0pZeUGGvfDlkqKOKd36rpYJDWi8u65UD3tZYEjIRBaYTRRwbwDDdn15IwMzGJ5DgxfAlGcK5TS2t6LY7To/pfhbE9YkQI52Lcj9PXqAPm7N1LS+c0fVWMiecPjmB8AitPxxWLUyF7NQwHZlPcISUDMVwBbA8KMP4SNrXOnTHaBZSBjqvcPxTFsoIKEJBXxnICizxN/rRhIxt68Ih2jvGvn6aSZOh9r8AFWSzD2RgyxNL4f5hi5HV6y6XgNYYjxc5qqiTL8NWBG+3SPw=----ATTACHMENT:----NjE3NzYxODU2OTAxODg5OSAzMTc1Mzc2NDE4ODE2MDI3IDQ2MzE1MDYzNjE5NTAxNzI=