Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

模版使用 %F 会导致Swoole core dump #265

Open
Feiir opened this issue Mar 9, 2019 · 17 comments
Open

模版使用 %F 会导致Swoole core dump #265

Feiir opened this issue Mar 9, 2019 · 17 comments
Assignees
Labels

Comments

@Feiir
Copy link

Feiir commented Mar 9, 2019

swoole4.4 php7.2 SeasLog2.x
不记录 %F 则正常

@hi-man hi-man self-assigned this Mar 15, 2019
@amuluowin
Copy link
Member

swoole4.3.1+php7.2.16+seaslog2.0.2没有出现coredump,能否多提供点信息,例如使用的框架,操作系统等 。

@Feiir
Copy link
Author

Feiir commented Mar 16, 2019

Centos 7.3.1611, php 7.2.0 , Swoole 4.3.1-alpha, 框架的话没用其他框架,就自己搭的框架,才开始写呢,然后用同事的电脑也试了下,只要在 php.ini 里配置 seaslog 的模板选项上加上 %F 记录文件名:行号,然后在代码里随便抛出一个可以捕获的异常手动捕获就会直接导致 swoole core dump

@hi-man
Copy link
Contributor

hi-man commented Mar 19, 2019

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

帮给个样例代码

@Feiir
Copy link
Author

Feiir commented Mar 26, 2019

复现条件大概就是

  1. 需要开启 %F 记录文件行数 (必要)
  2. 新建类重新代理 seasLog 静态方法 (必要)
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);
    }

}
  1. \spl_autoload_register(); 注册自动加载函数

@769344359
Copy link
Member

现在还有这个问题吗

@giantwu
Copy link

giantwu commented Dec 16, 2019

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;

@769344359
Copy link
Member

@giantwu 你能用更加完整一点的代码码?

@769344359
Copy link
Member

@Feiir 我复现了代码

<?php
class Log
{
    // 代理seaslog的静态方法,如 Seaslog::debug
    public static function __callStatic($name, $arguments)
    {
        forward_static_call_array(['SeasLog', $name], $arguments);
    }

}
Log::error("aaa");

@769344359
Copy link
Member

769344359 commented Dec 16, 2019

获取字符串判空有点问题,而且貌似对这种动态代理的调用不支持

@769344359
Copy link
Member

#284
提交了pr了

@giantwu
Copy link

giantwu commented Dec 17, 2019

已经回退到1.8.6了,完美解决。

@769344359
Copy link
Member

@giantwu 其他都没有变,只是回退版本吗?
编译安装的吗?

@769344359 769344359 added the bug label Dec 17, 2019
@769344359
Copy link
Member

@giantwu 你这个core dump 和我发现的core dump 不是同一个,我发现的是另外一个

@giantwu
Copy link

giantwu commented Dec 17, 2019

@giantwu 你这个core dump 和我发现的core dump 不是同一个,我发现的是另外一个

回退到1.8.6 版本以后 你的demo和我的使用方法都过了,没有问题了。是直接pecl安装的。其他都没做改变。

@769344359
Copy link
Member

769344359 commented Dec 19, 2019

@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
Copy link

giantwu commented Jan 2, 2020

@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

@769344359
Copy link
Member

769344359 commented Jan 2, 2020

@giantwu 我晚点再编译一次看看能不能复现

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants