Open Feiir opened 5 years ago
swoole4.3.1+php7.2.16+seaslog2.0.2没有出现coredump,能否多提供点信息,例如使用的框架,操作系统等 。
Centos 7.3.1611, php 7.2.0 , Swoole 4.3.1-alpha, 框架的话没用其他框架,就自己搭的框架,才开始写呢,然后用同事的电脑也试了下,只要在 php.ini 里配置 seaslog 的模板选项上加上 %F 记录文件名:行号,然后在代码里随便抛出一个可以捕获的异常手动捕获就会直接导致 swoole core dump
Centos 7.3.1611, php 7.2.0 , Swoole 4.3.1-alpha, 框架的话没用其他框架,就自己搭的框架,才开始写呢,然后用同事的电脑也试了下,只要在 php.ini 里配置 seaslog 的模板选项上加上 %F 记录文件名:行号,然后在代码里随便抛出一个可以捕获的异常手动捕获就会直接导致 swoole core dump
go(function() {
throw new \Exception('i am going down');
})
`
swoole 4.3.2-alpha
php 7.2.16
不能重现core dump
帮给个样例代码
复现条件大概就是
namespace Llt\Core;
use Llt;
use SeasLog;
class Log
{
public static function init()
{
// 设置日志目录
SeasLog::setBasePath(Llt::$storageLogPath);
}
// 代理seaslog的静态方法,如 Seaslog::debug
public static function __callStatic($name, $arguments)
{
forward_static_call_array(['SeasLog', $name], $arguments);
}
}
\spl_autoload_register();
注册自动加载函数 现在还有这个问题吗
Centos 7.3.1611, php 7.2.0 , Swoole 4.3.1-alpha, 框架的话没用其他框架,就自己搭的框架,才开始写呢,然后用同事的电脑也试了下,只要在 php.ini 里配置 seaslog 的模板选项上加上 %F 记录文件名:行号,然后在代码里随便抛出一个可以捕获的异常手动捕获就会直接导致 swoole core dump
go(function() { throw new \Exception('i am going down'); }) ` swoole 4.3.2-alpha php 7.2.16 不能重现core dump 帮给个样例代码
php: 7.2.25 ,seaslog:2.0.2
mix-php command 中定义一个简单的command,在该command中 写如下代码: $log = new \Seaslog(); $log->error(['1234r5t']); call_user_func_array([$log,'error'], ['123456']); return 111;
@giantwu 你能用更加完整一点的代码码?
@Feiir 我复现了代码
<?php
class Log
{
// 代理seaslog的静态方法,如 Seaslog::debug
public static function __callStatic($name, $arguments)
{
forward_static_call_array(['SeasLog', $name], $arguments);
}
}
Log::error("aaa");
获取字符串判空有点问题,而且貌似对这种动态代理的调用不支持
已经回退到1.8.6了,完美解决。
@giantwu 其他都没有变,只是回退版本吗? 编译安装的吗?
@giantwu 你这个core dump 和我发现的core dump 不是同一个,我发现的是另外一个
@giantwu 你这个core dump 和我发现的core dump 不是同一个,我发现的是另外一个
回退到1.8.6 版本以后 你的demo和我的使用方法都过了,没有问题了。是直接pecl安装的。其他都没做改变。
@giantwu 用这个例子我试1.8.6一样会core dump,你确定设置了%F
吗?
<?php
class Log
{
// 代理seaslog的静态方法,如 Seaslog::debug
public static function __callStatic($name, $arguments)
{
forward_static_call_array(['SeasLog', $name], $arguments);
}
}
Log::error("aaa");
@giantwu 用这个例子我试1.8.6一样会core dump,你确定设置了
%F
吗?<?php class Log { // 代理seaslog的静态方法,如 Seaslog::debug public static function __callStatic($name, $arguments) { forward_static_call_array(['SeasLog', $name], $arguments); } } Log::error("aaa");
确定模版中包含了%F .我们线上就这么用的。1.8.6 ,没有问题。
seaslog.default_template => %T|%H|%P|%D|%R|%I|%F|%C|%L|%M => %T|%H|%P|%D|%R|%I|%F|%C|%L|%M
@giantwu 我晚点再编译一次看看能不能复现
swoole4.4 php7.2 SeasLog2.x 不记录 %F 则正常