. */ namespace SP\Log; use SP\Config\Config; use SP\Config\ConfigData; use SP\Core\Exceptions\SPException; use SP\Util\Connection; /** * Class Syslog para envío de mensaje al servicio de syslog * * @package SP\Log */ class Syslog extends AbstractLogger { use SP\Core\Dic\InjectableTrait; /** * @var ConfigData */ protected $ConfigData; /** * @var bool */ private $isRemote = false; /** * Syslog constructor. */ public function __construct() { $this->injectDependencies(); } /** * @param Config $config */ public function inject(Config $config) { $this->ConfigData = $config->getConfigData(); } /** * @param boolean $isRemote */ public function setIsRemote($isRemote) { $this->isRemote = $isRemote; } /** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param array $context * @return null */ public function log($level, $message, array $context = array()) { if ($this->isRemote === false) { openlog("sysPass", LOG_PID, LOG_LOCAL0); syslog($this->getSyslogLevel($level), $message); closelog(); } else { $this->logRemote($message); } } /** * Devolver el código de nivel para la syslog * * @param $level string El nivel del mensaje * @return int */ private function getSyslogLevel($level) { switch ($level) { case LogLevel::EMERGENCY: return LOG_EMERG; case LogLevel::ALERT: return LOG_ALERT; case LogLevel::CRITICAL: return LOG_CRIT; case LogLevel::ERROR: return LOG_ERR; case LogLevel::WARNING: return LOG_WARNING; case LogLevel::NOTICE: return LOG_NOTICE; case LogLevel::INFO: return LOG_INFO; case LogLevel::DEBUG: return LOG_DEBUG; } } /** * Enviar un mensaje a syslog remoto * * @param $message */ private function logRemote($message) { $server = $this->ConfigData->getSyslogServer(); if (!empty($server)) { $syslogMsg = date('M d H:i:s ') . "sysPass web: $message"; try { $Connecion = new Connection($server, $this->ConfigData->getSyslogPort()); $Connecion->getSocket(Connection::TYPE_UDP); $Connecion->send($syslogMsg); $Connecion->closeSocket(); } catch (SPException $e) { error_log($e->getMessage()); error_log($e->getHint()); } } } }