使用openlog-php实现多线程

使用openlog-php实现多线程,php,unix,Php,Unix,我在我的项目中使用日志记录,首先,我初始化一些对象,我使用带有特定标识的openlog函数,然后使用syslog来编写我需要的所有内容。但我有一个问题,在对象中有一些外部请求,我想为它们更改ident,所以我尝试执行如下操作: openlog($ident, LOG_PID, LOG_USER); syslog(LOG_DEBUG, $data); .... // external request in other place, where $ident is not available ope

我在我的项目中使用日志记录,首先,我初始化一些对象,我使用带有特定标识的openlog函数,然后使用syslog来编写我需要的所有内容。但我有一个问题,在对象中有一些外部请求,我想为它们更改ident,所以我尝试执行如下操作:

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);

那么,我如何获得第一个openlog标识,或者这是做同样事情的另一种方法?

以下是一些我认为有效的代码。我正在使用单例类
记录器

<?

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();

我很确定答案是无法获取当前活动的
ident
的值。它作为一个“基本全局”保存在php中,看起来只写给我。最好的解决方案可能是为openlog/closelog制作自己的包装器,适当地跟踪
ident