$facility
$facility :
A Handler for logging to a remote syslogd server.
Classes extending it should (in most cases) only implement write($record)
$formatter : \Monolog\Formatter\FormatterInterface
__construct(string $host, integer $port = 514, mixed $facility = LOG_USER, integer $level = \Monolog\Logger::DEBUG, Boolean $bubble = true, string $ident = 'php')
string | $host | |
integer | $port | |
mixed | $facility | |
integer | $level | The minimum logging level at which this handler will be triggered |
Boolean | $bubble | Whether the messages that are handled can bubble up the stack or not |
string | $ident | Program name or tag for each log message. |
isHandling(array $record) : Boolean
Checks whether the given record will be handled by this handler.
This is mostly done for performance reasons, to avoid calling processors for nothing.
Handlers should still check the record levels within handle(), returning false in isHandling() is no guarantee that handle() will not be called, and isHandling() might not be called for a given record.
array | $record | Partial log record containing only a level key |
setFormatter(\Monolog\Formatter\FormatterInterface $formatter) : self
Sets the formatter.
\Monolog\Formatter\FormatterInterface | $formatter |
getFormatter() : \Monolog\Formatter\FormatterInterface
Gets the formatter.
getDefaultFormatter() : \Monolog\Formatter\FormatterInterface
Gets the default formatter.
<?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\Handler;
use Monolog\Logger;
use Monolog\Handler\SyslogUdp\UdpSocket;
/**
* A Handler for logging to a remote syslogd server.
*
* @author Jesper Skovgaard Nielsen <nulpunkt@gmail.com>
*/
class SyslogUdpHandler extends AbstractSyslogHandler
{
protected $socket;
protected $ident;
/**
* @param string $host
* @param int $port
* @param mixed $facility
* @param int $level The minimum logging level at which this handler will be triggered
* @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not
* @param string $ident Program name or tag for each log message.
*/
public function __construct($host, $port = 514, $facility = LOG_USER, $level = Logger::DEBUG, $bubble = true, $ident = 'php')
{
parent::__construct($facility, $level, $bubble);
$this->ident = $ident;
$this->socket = new UdpSocket($host, $port ?: 514);
}
protected function write(array $record)
{
$lines = $this->splitMessageIntoLines($record['formatted']);
$header = $this->makeCommonSyslogHeader($this->logLevels[$record['level']]);
foreach ($lines as $line) {
$this->socket->write($line, $header);
}
}
public function close()
{
$this->socket->close();
}
private function splitMessageIntoLines($message)
{
if (is_array($message)) {
$message = implode("\n", $message);
}
return preg_split('/$\R?^/m', $message, -1, PREG_SPLIT_NO_EMPTY);
}
/**
* Make common syslog header (see rfc5424)
*/
protected function makeCommonSyslogHeader($severity)
{
$priority = $severity + $this->facility;
if (!$pid = getmypid()) {
$pid = '-';
}
if (!$hostname = gethostname()) {
$hostname = '-';
}
return "<$priority>1 " .
$this->getDateTime() . " " .
$hostname . " " .
$this->ident . " " .
$pid . " - - ";
}
protected function getDateTime()
{
return date(\DateTime::RFC3339);
}
/**
* Inject your own socket, mainly used for testing
*/
public function setSocket($socket)
{
$this->socket = $socket;
}
}