che*_*ica 13 php logging multithreading webrequest
在多线程环境中(像大多数Web平台一样),我经常在我的应用程序的日志中包含某种线程ID.这使我能够确切地告诉哪些日志条目来自哪个请求/线程,当有多个请求同时写入同一个日志时.
在.NET/C#中,这可以通过log4net的格式化程序来完成,默认情况下包括当前线程ManagedThreadId
(数字)或Name
(给定名称).这些属性唯一标识一个线程(例如:参见:如何使用log4net使用Threadpool线程记录正确的上下文?
在PHP中,我没有发现任何类似的东西(我问谷歌,PHP文档和SO).它存在吗?
gil*_*ilm 16
直到最近,我使用了apache_getenv("UNIQUE_ID"),它与crc32或其他哈希函数完美配合.
现在我只是使用以下内容,以消除对Apache和此mod的依赖.
$uniqueid = sprintf("%08x", abs(crc32($_SERVER['REMOTE_ADDR'] . $_SERVER['REQUEST_TIME'] . $_SERVER['REMOTE_PORT'])));
它足够独特,可以了解哪些日志属于哪个请求.如果需要更高的精度,可以使用其他散列函数.
希望这可以帮助.
Run Code Online (Sandbox Code Playgroud)int zend_thread_id ( void )
此函数返回当前线程的唯一标识符.
虽然:
只有在使用ZTS(Zend线程安全)支持和调试模式(--enable-debug)构建PHP时,此功能才可用.
mysql_thread_id()
当您使用该API进行数据库访问时(或mysqli::$thread_id
使用mysqli时),您也可以尝试调用.