многократное использование openlog php - PullRequest
0 голосов
/ 24 сентября 2018

Сначала я использую логирование в своем проекте, затем инициализирую некоторый объект, использую функцию openlog с определенным идентификатором, а затем использую syslog для записи всего, что мне нужно.Но у меня есть одна проблема, есть некоторые внешние запросы внутри объектов, и я хочу изменить для них идентификатор, поэтому я пытаюсь сделать что-то вроде:

openlog($ident, LOG_PID, LOG_USER);
syslog(LOG_DEBUG, $data);
....
// external request in other place, where $ident is not available
openlog($newIdent, LOG_PID, LOG_USER);
syslog(LOG_DEBUG, $data);
closelog();
// here I wanna change openlog to initial value
openlog(?, LOG_PID, LOG_USER);

Так как я могу получить первый идентификатор открытого журнала илиэто еще один способ сделать то же самое?

1 Ответ

0 голосов
/ 24 сентября 2018

Вот код, который, я думаю, работает.Я использую класс Singleton Logger:

<?

class Logger {
    private $idents = [];

    public static function Instance()
    {
        static $inst = null;
        if ($inst === null) {
            $inst = new Logger();
        }
        return $inst;
    }

    private function __construct()
    {

    }

    function openlog($ident, $option = LOG_PID, $facility = LOG_USER) {
        array_unshift($this->idents, $ident);
        return openlog($ident, $option, $facility);
    }

    function closelog() {
        closelog();
        array_shift($this->idents);
        if ($this->idents) {
            return openlog($this->idents[0]);
        }
    }
}

$logger = Logger::Instance();

$ident = 'id1';

$logger->openlog($ident, LOG_PID, LOG_USER);

$data = 'test1';
syslog(LOG_DEBUG, $data); // Logs to 'id1'


$newIdent = 'id2';
$logger->openlog($newIdent, LOG_PID, LOG_USER);

$data = 'test2';
syslog(LOG_DEBUG, $data); // Logs to 'id2'
$logger->closelog();

$data = 'test3';
syslog(LOG_DEBUG, $data); // Logs to 'id1'

$logger->closelog();
$data = 'test4';
syslog(LOG_DEBUG, $data); // Logs to the default ident
$logger->closelog();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...