芝麻web文件管理V1.00
编辑当前文件:/home/mgatv524/public_html/mctv/lib/Service/LogService.php
. */ namespace Xibo\Service; use Carbon\Carbon; use Monolog\Logger; use Xibo\Helper\DatabaseLogHandler; use Xibo\Storage\PdoStorageService; /** * Class LogService * @package Xibo\Service */ class LogService implements LogServiceInterface { /** * @var \Psr\Log\LoggerInterface */ private $log; /** * The Log Mode * @var string */ private $mode; /** * The user Id * @var int */ private $userId = 0; /** * Audit Log Statement * @var \PDOStatement */ private $_auditLogStatement; /** * @inheritdoc */ public function __construct($logger, $mode = 'production') { $this->log = $logger; $this->mode = $mode; } /** * @inheritdoc */ public function setUserId($userId) { $this->userId = $userId; } /** * @inheritdoc */ public function setMode($mode) { $this->mode = $mode; } /** * @inheritdoc */ public function audit($entity, $entityId, $message, $object) { $this->debug(sprintf('Audit Trail message recorded for %s with id %d. Message: %s', $entity, $entityId, $message)); if ($this->_auditLogStatement == null) { $dbh = PdoStorageService::newConnection(); $this->_auditLogStatement = $dbh->prepare(' INSERT INTO `auditlog` (logDate, userId, entity, message, entityId, objectAfter) VALUES (:logDate, :userId, :entity, :message, :entityId, :objectAfter) '); } // If we aren't a string then encode if (!is_string($object)) $object = json_encode($object); PdoStorageService::incrementStatStatic('auditlog', 'insert'); $this->_auditLogStatement->execute([ 'logDate' => Carbon::now()->format('U'), 'userId' => $this->userId, 'entity' => $entity, 'message' => $message, 'entityId' => $entityId, 'objectAfter' => $object ]); } /** * @inheritdoc */ public function sql($sql, $params) { if (strtolower($this->mode) == 'test') { $paramSql = ''; foreach ($params as $key => $param) { $paramSql .= 'SET @' . $key . '=\'' . $param . '\';' . PHP_EOL; } $this->log->debug($paramSql . str_replace(':', '@', $sql)); } } /** * @inheritdoc */ public function debug($object) { // Get the calling class / function $this->log->debug($this->prepare($object, func_get_args())); } /** * @inheritdoc */ public function notice($object) { $this->log->notice($this->prepare($object, func_get_args())); } /** * @inheritdoc */ public function info($object) { $this->log->info($this->prepare($object, func_get_args())); } /** * @inheritdoc */ public function warning($object) { $this->log->warning($this->prepare($object, func_get_args())); } /** * @inheritdoc */ public function error($object) { $this->log->error($this->prepare($object, func_get_args())); } /** * @inheritdoc */ public function critical($object) { $this->log->critical($this->prepare($object, func_get_args())); } /** * @inheritdoc */ public function alert($object) { $this->log->alert($this->prepare($object, func_get_args())); } /** * @inheritdoc */ public function emergency($object) { $this->log->emergency($this->prepare($object, func_get_args())); } /** * @inheritdoc */ private function prepare($object, $args) { if (is_string($object)) { array_shift($args); if (count($args) > 0) $object = vsprintf($object, $args); } return $object; } /** * @inheritdoc */ public static function resolveLogLevel($level) { switch (strtolower($level)) { case 'emergency': return Logger::EMERGENCY; case 'alert': return Logger::ALERT; case 'critical': return Logger::CRITICAL; case 'warning': return Logger::WARNING; case 'notice': return Logger::NOTICE; case 'info': return Logger::INFO; case 'debug': return Logger::DEBUG; case 'error': default: return Logger::ERROR; } } /** @inheritDoc */ public function setLevel($level) { foreach ($this->log->getHandlers() as $handler) { if ($handler instanceof DatabaseLogHandler) { $handler->setLevel($level); } } } }