PHPackages                             hehex/hehep-hlogger - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. hehex/hehep-hlogger

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

hehex/hehep-hlogger
===================

hehep-hlogger 是一个PHP日志基础组件,仿python logging模块,支持处理器、过滤器、格式器、上下文

v1.0.0(1y ago)014Apache-2.0PHPPHP &gt;=7.1

Since Aug 31Pushed 10mo ago1 watchersCompare

[ Source](https://github.com/chinahehex/hehep-hlogger)[ Packagist](https://packagist.org/packages/hehex/hehep-hlogger)[ RSS](/packages/hehex-hehep-hlogger/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (2)Used By (0)

hehep-hlogger
=============

[](#hehep-hlogger)

介绍
--

[](#介绍)

> hehep-hlogger 是一个PHP 日志工具组件,仿python logging模块
> 支持处理器、过滤器、格式器、上下文

安装
--

[](#安装)

- **gitee下载**:

```
git clone git@gitee.com:chinahehex/hehep-hlogger.git

```

- **github下载**:

```
git clone git@github.com:chinahehex/hehep-hlogger.git

```

- 命令安装：

```
composer require hehex/hehep-hlogger

```

组件配置
----

[](#组件配置)

```
$conf = [

    // 默认日志记录器名称
    'defaultLogger'=>"hehe",

    // 预定义上下文
    'contexts'=>[
        'default'=>[
            'class'=>'hehe\core\hlogger\contexts\TraceContext',
            'skipClasses'=>[],// 跳过的类名,
            'skipFuns'=>[],// 跳过的函数名,
        ]
    ],

    // 预定义日志过滤器
    'filters'=>[
        'info'=>[
            //'class'=>'',// 过滤器类名,未填则默认为LogFilter
            'levels'=>['info'],
            'categorys'=>['admin\controller*']
        ]
    ],

    // 预定义日志格式器
    'formatters'=>[
        'default'=>[
            //'class'=>'',// 消息格式器类名,未填则默认为LogFormatter
            'tpl'=>'{date:Y-m-d:H:i} :{msg},file:{file}, line:{line},{class}->{fn} {n}',
        ]
    ],

    // 预定义日志处理器
    'handlers'=>[
        'default'=>[
            'class'=>'FileHandler',
            'logFile'=>'/home/hehe/www/logs/hehep.log',
            'formatter'=>'default'
        ]
    ],

    // 预定义日志记录器
    'loggers'=>[
        'hehe'=>[
            'bufferLimit'=>0,// 缓冲日志数量
            'handlers'=>['default'],
            'levels'=>['info','error','warning','exception','debug'],// 设置filter 后,此设置项将无效
            'categorys'=>['admin\controller\*'],// 设置filter 后,此设置项将无效
            'filter'=>'info',// 定义过滤器
            'formatter'=>'default',// 定义日志格式器
            'context'=>['default'],// 定义上下文
        ],
    ]
];
```

基本示例
----

[](#基本示例)

- 记录日志

```
use hehe\core\hlogger\LogManager;
use hehe\core\hlogger\Log;

// 创建日志管理器
$hlog = new LogManager([]);

// 记录日志
$hlog->info('info log message');
$hlog->error('error log message');
// 设置默认"default"处理器参数
Log::setHandler('default',['logFile'=>'/home/hehe/www/logs/hehep.log']);
Log::info('info log message');
Log::error('error log message');
```

日志管理器
-----

[](#日志管理器)

> 用于管理日志相关的操作,比如
> 配置日志处理器,日志格式器,日志过滤器,日志记录器,
> 创建日志记录器,日志处理器,日志格式器,志过滤器的对象,
> 记录不同级别日志

### 日志管理器示例

[](#日志管理器示例)

```
use hehe\core\hlogger\LogManager;
use hehe\core\hlogger\Log;

// 创建日志管理器
$hlog = new LogManager([]);

// 默认日志记录器记录日志
$hlog->info('info log message');
$hlog->error('error log message');

// 获取日志记录器hehe,单例对象
$heheLogger = $hlog->getLogger('hehe');

// 创建新日志记录器
$heheLogger = $hlog->newLogger('hehe');

// 创建日志过滤器
$levelFilter = $hlog->levelFilter('error,info');
$heheLogger->addFilter($levelFilter);

// 创建日志处理器
$fileHandler = $hlog->fileHandler('/home/hehe/www/logs/hehep.log');
$heheLogger->addHandler($fileHandler);

// 创建日志格式器
$lineFormatter = $hlog->lineFormatter('{date:Y-m-d:H:i},{level},{userid} :{msg} ,file:{file}, line:{line},{class}->{fn}{n}');
$heheLogger->setFormatter($lineFormatter);

// 新增上下文变量
$heheLogger->addContext(function(){
    return [
        'userid'=>1
    ];
});

// 写入日志
$heheLogger->info('info log message');
$heheLogger->error('error log message');
```

### 预定义配置

[](#预定义配置)

```
use hehe\core\hlogger\LogManager;
use hehe\core\hlogger\Log;

// 创建日志管理器
$hlog = new LogManager([]);

// 设置默认"default"处理器参数
$hlog->setHandler('default',['logFile'=>'/home/hehe/www/logs/xxxx.log']);

// 设置名称为“hehe”格式器
$hlog->setFormatter('hehe',[
    'class'=>'lineFormatter',
    'tpl'=>'{date:Y-m-d:H:i} :{msg},file:{file}, line:{line},{class}->{fn} {cate} {n}'
]);

// 设置名称为“hehe”日志过滤器
$hlog->setFilter('hehe',[
    'levels'=>'error,info',
    'categorys'=>'admin\controller*',
]);

// 设置名称为“hehe”日志处理器
$hlog->setHandler('hehe',[
    'class'=>'FileHandler',
    'logFile'=>'/home/hehe/www/logs/xxxx.log',
    'formatter'=>'hehe',
    //'filter'=>'hehe'
]);

// 设置名称为“hehe”日志记录器
$hlog->setLogger('hehe',[
    'handlers'=>'hehe',
    'filters'=>'hehe',
    'levels'=>'error,info',
]);

// 获取预定义hehe日志记录器单例对象
$heheLogger = $hlog->getLogger('hehe');

// 获取预定义hehe日志记录器新对象
$heheLogger = $hlog->newLogger('hehe');

// 写入日志
$heheLogger->error('error log message');
```

日志记录器
-----

[](#日志记录器)

> 类名:hehe\\core\\hlogger\\base\\Logger
> 作用:用于记录日志，可以设置日志级别,日志过滤器,日志处理器
> 属性:
> 'bufferLimit'=&gt;0,// 缓冲日志数量
> 'handlers'=&gt;\['default'\],// 日志处理器
> 'levels'=&gt;\['info','error','warning','debug'\],// 设置允许的消息级别
> 'categorys'=&gt;\['admin\\controller\*'\],// 设置允许的日志类别
> 'filter'=&gt;'info',// 定义过滤器
> 'formatter'=&gt;'default',// 定义日志格式器

### 创建日志记录器

[](#创建日志记录器)

```
use hehe\core\hlogger\LogManager;

$hlog = new LogManager([]);

// 获取预定义hehe日志记录器单例对象
$heheLogger = $hlog->getLogger('hehe');

// 获取预定义hehe日志记录器新对象
$heheLogger = $hlog->newLogger('hehe');

// 获取一个空的日志记录器对象
$heheLogger = $hlog->newLogger();

$heheLogger = $hlog->newLogger([
    'bufferLimit'=>2,
    'levels'=>'error,info',
    'categorys'=>'',// 'admin\controller*'
    'filters'=>'default,hehe',
    'handlers'=>'default,hehe',
]);

// 记录器新增日志过滤器
$filter = $hlog->levelFilter('error,info');
$heheLogger->addFilter($filter);

// 记录器新增日志处理器
$handler = $hlog->fileHandler('user/xxx.log');
$heheLogger->addHandler($handler);

// 设置记录器日志格式器
$hlogger->setFormatter($hlog->lineFormatter('{date:Y-m-d:H:i},{level},:{msg} ,file:{file}, line:{line},{class}->{fun}{n}'));

// 记录日志
$heheLogger->info('info log message');
```

日志消息对象
------

[](#日志消息对象)

> 类名:hehe\\core\\hlogger\\base\\Message
> 作用:用于存储日志消息,级别，上下文对象

### 示例代码

[](#示例代码)

```
use hehe\core\hlogger\base\Message;
$msg = new Message();

// 获取原始日志字符串
$msg->getMsg();

// 获取日志经过格式化处理后的日志字符串
$msg->getMessage();

// 获取日志级别
$msg->getLevel();

// 获取上下文对象
$context = $msg->getContext();

// 获取上下文对象值
$pid = $context->getValue('pid');

// 增加上下文对象值
$context->addValue('username','hehe');
$context->addValue('userid',function(){
    // 获取用户id
});

// $context->addValue('userid',['类对象','对象方法名']);

// 获取用户传入的额外参数,如Log::error("error message",['id'=>1])
$context->getExtra();
```

日志处理器
-----

[](#日志处理器)

> 基类:hehe\\core\\hlogger\\handlers\\LogHandler
> 作用:持久化日志信息，比如文件处理器,数据库处理器,邮件处理器等等
> 全局属性:
> 'filter'=&gt;'',// 日志过滤器
> 'formatter'=&gt;'',// 日志格式器

### 预定义处理器

[](#预定义处理器)

```
use hehe\core\hlogger\LogManager;
$conf = [
     // 预定义日志处理器定义
    'handlers'=>[
        // 日志文件处理器
        'default'=>[
            'class'=>'FileHandler',
            'logFile'=>'/home/hehe/www/logs/hehep.log',// 日志文件
            'filter'=>'',// 日志过滤器
            'formatter'=>'default'// 日志格式器
        ],

        'default1'=>[
            'class'=>'FileHandler',
            'logFile'=>'/home/hehe/www/logs/hehep.log',// 日志文件
            'filter'=>[// 日志过滤器
               'levels'=>['error'],
               'categorys'=>['admin\controller*']
            ],
            'formatter'=>[// 日志格式器
                'tpl'=>'{date:Y-m-d:H:i} :{msg} ,file:{file}, line:{line},{class}->{fun} {n}',
            ]
        ]
    ],

    // 预定义其他配置
];
```

### 自定义处理器

[](#自定义处理器)

> 必须继承基类:hehe\\core\\hlogger\\handlers\\LogHandler,并实现方法:handleMessage()

```
namespace hehe\core\hlogger\handlers;

use hehe\core\hlogger\base\LogHandler;
use hehe\core\hlogger\base\Message;

class FileHandler extends LogHandler
{
    // 构造函数
    public function __construct(string $logFile = '',array $propertys = [])
    {
        $this->logFile = $logFile;
        parent::__construct($propertys);

    }

    // 同时处理多条日志消息
    public function handleMessages(array $messages)
    {
        foreach ($messages as $message) {
            $this->handleMessage($message);
        }
    }

    // 处理日志消息
    public function handleMessage(Message $message):void
    {
        // 获取格式化后消息
        $log_format_msg = $message->getMessage();

        // 获取原始日志消息
        $raw_msg = $message->getMsg();

        // 获取日志上下文对象
        $context = $message->getContext();

        // 获取当前进程ID
        $pid = $context->getValue('pid');

        // 增加上下文对象值
        $context->addValue('username','hehe');
        $context->addValue('userid',function(){
            // 获取用户id
        });

        // $context->addValue('userid',['类对象','对象方法名']);

        // 获取用户传入的额外参数,如Log::error("error message",['id'=>1])
        $context->getExtra();
    }
}
```

### 创建处理器对象

[](#创建处理器对象)

```
use hehe\core\hlogger\LogManager;

$hlog = new LogManager([]);
$logger = $hlog->newLogger();

// 创建预定义“default1”日志处理器
$handler = $hlog->newHandler('default1');

// 创建空的日志处理器对象
$handler = $hlog->newHandler();
$handler->addFilter($hlog->levelFilter('error,info'));
$handler->setFormatter($hlog->lineFormatter('{date:Y-m-d:H:i} :{msg} ,file:{file}, line:{line},{class}->{fn} {n}'));
$logger->addHandler($handler);

// 记录日志
$logger->error('error log message');
```

### 文件处理器

[](#文件处理器)

> 基类:hehe\\core\\hlogger\\handlers\\FileHandler
> 属性:
> 'logFile'=&gt;'',// 日志文件
> 'useLock'=&gt;false,// 是否使用文件锁(flock),默认为false

- 示例代码

```
use hehe\core\hlogger\LogManager;
$hlog = new LogManager();
$logger = $hlog->newLogger();

// 创建处理器, 默认日志文件为/home/hehe/www/logs/hehep.log,
$handler = $hlog->fileHandler('/home/hehe/www/logs/hehep.log');
$handler = $hlog->fileHandler([
    'logFile'=>'/home/hehe/www/logs/hehep.log',
    'useLock'=>false,// 是否使用文件锁(flock),默认为false
]);

$logger->addHandler($handler);

$logger->info('info log message');
```

### 文件大小轮转处理器

[](#文件大小轮转处理器)

> 类名:hehe\\core\\hlogger\\handlers\\ByteRotatingFileHandler, 继承自RotatingFileHandler
> 属性:
> 'logFile'=&gt;'',// 日志文件
> 'maxByte'=&gt;0,// 最大文件容量,单kb,日志文件超过该值时,将创建新的日志文件
> 'rotatefmt'=&gt;'{filename}',// 轮转文件格式,变量可以取自日志上下文, filename:当前日志文件名
> 'rotatefmtParams'=&gt;\['filename'=&gt;'\\w+'\],// 轮转文件格式参数,可设置变量的正则表达式
> 'backupCount'=&gt;0,// 最大备份文件数量,默认为0,表示不限制
> 'backupfmt'=&gt;'{filename}\_up{index}',// 备份文件格式,变量可以取自日志上下文, filename:当前轮转文件名 ,index:自增序号 日期格式
> 'backupfmtParams'=&gt;\['index'=&gt;'\\d+'\],// 备份文件格式参数,可设置变量的正则表达式

> 轮转文件名支持上下文变量,如:{filename}*{pid},pid:当前进程id
> 备份文件名支持上下文变量,如:{filename}*{pid},pid:当前进程id

- 示例代码

```
use hehe\core\hlogger\LogManager;
$hlog = new LogManager();
$logger = $hlog->newLogger();

// 创建处理器, 默认日志文件为/home/hehe/www/logs/hehep.log, 日志文件大小为5M
$handler = $hlog->byteRotatingFileHandler('/home/hehe/www/logs/hehep.log',1024 * 5);
$handler = $hlog->byteRotatingFileHandler([
    'logFile'=>'/home/hehe/www/logs/hehep.log',
    // 最大文件容量,单kb,5M
    'maxByte'=>1024 * 5,
    // filename:当前日志文件名 ,date:为当前日期,"YmdHi" 日期格式
    'rotatefmt'=>'{filename}_{date:YmdHi}',
]);

$logger->addHandler($handler);

$logger->info('info log message');
```

### 文件日期轮转处理器

[](#文件日期轮转处理器)

> 类名:hehe\\core\\hlogger\\handlers\\TimedRotatingFileHandler, 继承自RotatingFileHandler
> 属性:
> 'logFile'=&gt;'',// 日志文件
> 'rotateMode'=&gt;'d',// 日志轮转模式,支持d(天),h(小时),m(月),s(分钟),w(周),y(年),默认为d,表示按天轮转
> 'rotatefmt'=&gt;'{filename}\_{date:YmdHi}\_hehe',// 轮转文件格式,变量可以取自日志上下文,
> // filename:当前日志文件名 ,date:为当前日期,"YmdHi" 日期格式
> 'rotatefmtParams'=&gt;\['filename'=&gt;'\\w+'\],// 轮转文件格式参数,可设置变量的正则表达式
> 'maxFile'=&gt;0,// 最大文件数量,默认为0,表示不限制'
> 'maxByte'=&gt;0,// 最大文件容量,单kb,日志文件超过该值时,将创建新的日志文件
> 'backupCount'=&gt;0,// 最大备份文件数量,默认为0,表示不限制
> 'backupfmt'=&gt;'{filename}\_up{index}',// 备份文件格式,变量可以取自日志上下文,
> // filename:当前轮转文件名 ,index:自增序号
> 'backupfmtParams'=&gt;\['index'=&gt;'\\d+'\],// 备份文件格式参数,可设置变量的正则表达式

> 轮转文件名支持上下文变量,如:{filename}*{pid},pid:当前进程id
> 备份文件名支持上下文变量,如:{filename}*{pid},pid:当前进程id

- 示例代码

```
use hehe\core\hlogger\LogManager;
$hlog = new LogManager();
$logger = $hlog->newLogger();
$timedRotatingFileHandler = $logger->timedRotatingFileHandler('/home/hehe/www/logs/hehep.log','s');
$timedRotatingFileHandler->setMaxFiles(2);
$timedRotatingFileHandler->setRotatefmt('{filename}_{date:YmdHi}_hehe');
// $timedRotatingFileHandler->setRotatefmt('{date:Ym/d/H/}{filename}_{date:YmdHi}_hehe'); 目录日期格式
$timedRotatingFileHandler->setMaxByte(10);
$timedRotatingFileHandler->setBackupCount(4);
$logger->addHandler($timedRotatingFileHandler);
$logger->setFormatter($logger->lineFormatter('{date:Y-m-d:H:i},{level},{msg} ,file:{file}, line:{line} {n}'));
$logger->error("default logger error message");
```

### 扩展文件轮转处理器

[](#扩展文件轮转处理器)

> 继承:hehe\\core\\hlogger\\handlers\\RotatingFileHandler
> 属性:
> 'logFile'=&gt;'',// 日志文件
> 'rotating'=&gt;null,// 轮转状态,true 表示正在轮转中(日志文件未生成)
> 'maxFiles'=&gt;0,// 最大文件数量,默认为0,表示不限制
> 'rotatefmt'=&gt;'',// 轮转文件格式,变量可以取自日志上下文,
> 'rotatefmtParams'=&gt;\[\],// 轮转文件格式参数,可设置变量的正则表达式
> 'backupCount'=&gt;0,// 最大备份文件数量,默认为0,表示不限制
> 'backupfmt'=&gt;'',// 备份文件格式,变量可以取自日志上下文,
> 'backupfmtParams'=&gt;\[\],// 备份文件格式参数,可设置变量的正则表达式

- 示例代码

```
class TimedRotatingFileHandler extends RotatingFileHandler
{
    // 重写rotate 方法即可
    public function rotate(Message $message):void
    {
        // 第一次轮转，初始化轮转时间，轮转文件
        if ($this->rotateFile === '') {
            // 首次轮转文件
            $this->rotateFile($message);
        }

        // 轮转条件
        if ($message->getDataTime() > $this->endDate) {
            $this->rotating = true;
            // 轮转文件
            $this->rotateFile($message);
        }

        // 备份轮转文件
        if ($this->rotating === false && $this->maxByte > 0) {
            clearstatcache();
            if (@filesize($this->rotateFile) > ($this->maxByte * 1024)) {
                // 备份轮转文件
                $this->backupFile($message);
            }
        }

        return ;

    }
}
```

日志过滤器
-----

[](#日志过滤器)

> 基类:hehe\\core\\hlogger\\base\\LogFilter
> 作用:过滤日志消息，比如只记录error级别日志，或者只记录"admin\\controller\*"控制器的日志
> 属性:
> 'levels'=&gt;'info,error',// 支持的日志级别
> 'categorys'=&gt;\['admin\\controller\*'\],// 支持的日志分类

### 预定义过滤器

[](#预定义过滤器)

```
use hehe\core\hlogger\LogManager;
$conf = [
    // 预定日志过滤器
    'filters'=>[
        'default'=>[
            //'class'=>'',// 过滤器类名,未填则默认为LevelFilter
            'levels'=>['info','error'],// 过滤器支持的级别
            'categorys'=>['admin\controller*'],// 过滤器支持分类
        ],

        'default1'=>[
            'class'=>'LevelFilter',// 过滤器类名,未填则默认为LevelFilter
            'levels'=>['info','error'],// 过滤器支持的级别
            'categorys'=>['admin\controller*'],// 过滤器支持分类
        ],
    ],
];
```

### 自定义过滤器

[](#自定义过滤器)

> 必须继承基类:hehe\\core\\hlogger\\base\\LogFilter,并重写check方法

```
namespace hehe\core\hlogger\filters;

use hehe\core\hlogger\base\LogFilter;
use hehe\core\hlogger\base\Message;
use hehe\core\hlogger\Utils;

class LevelFilter extends LogFilter
{

    public function __construct(string $levels = '',array $propertys = [])
    {
        parent::__construct($propertys);
    }

    // 检查消息是否满足条件
    public function check(Message $message):bool
    {
        // @todo 实现自己的过滤规则

    }
}
```

### 创建过滤器对象

[](#创建过滤器对象)

```
use hehe\core\hlogger\LogManager;

$hlog = new LogManager([]);
$logger = $hlog->newLogger();

// 创建预定义“default1”日志处理器
$defaultFilter = $hlog->newFilter('default1');
$logger->addFilter($defaultFilter);

// 创建空的日志处理器对象
$emptyFilter = $hlog->newFilter();
$emptyFilter->setLevels('error,info');
$emptyFilter->setCategorys(['admin\controller*']);
$logger->addFilter($emptyFilter);

// 创建level过滤器对象
$levelFilter = $hlog->levelFilter('error,info',['admin\controller*']);
$logger->addFilter($levelFilter);

$logger->addHandler($hlog->fileHandler('/home/hehe/www/logs/hehep.log',1024 * 5));

// 记录日志
$logger->error('error log message');
```

日志格式器
-----

[](#日志格式器)

> 基类:hehe\\core\\hlogger\\base\\LogFormatter
> 作用:格式化日志消息，比如将日志消息转换为字符串

### 预定义日志格式器

[](#预定义日志格式器)

```
$conf = [
    // 日志格式器定义
    'formatters'=>[
        'default'=>[
            //'class'=>'',// 消息格式器类名,未填则默认为LineFormatter
            'tpl'=>'{date:Y-m-d:H:i} :{msg},file:{file}, line:{line},{class}->{fn} {n}',
        ]
    ],
];
```

### 自定义日志格式器

[](#自定义日志格式器)

```
namespace hehe\core\hlogger\formatters;

use hehe\core\hlogger\base\LogFormatter;
use hehe\core\hlogger\base\Message;
use hehe\core\hlogger\Utils;

class LineFormatter extends LogFormatter
{
    public function __construct(string $tpl = '',array $propertys = [])
    {
        $this->tpl = $tpl;
        parent::__construct($propertys);
    }

    // 解析消息
    public function parse(Message $message)
    {
        // 获取上下文对象
        $context = $message->getContext();
        // 获取上下文值
        $ip = $context->getValue('ip');
        $class = $context->getValue('class');
        $msg = $context->getValue('msg');
        $date = $context->getValue('date',['Y-m-d:H:i']);
    }
}
```

### 创建格式器对象

[](#创建格式器对象)

```
use hehe\core\hlogger\LogManager;

$hlog = new LogManager([]);
$logger = $hlog->newLogger();

// 创建预定义“default1”日志处理器
$defaultFormatter = $hlog->newFormatter('default1');
$logger->setFormatter($defaultFormatter);

// 创建空的日志处理器对象
$emptyFormatter = $hlog->newFormatter();
$emptyFormatter->setTpl('{date:Y-m-d:H:i} :{msg},file:{file}, line:{line},{class}->{fn} {n}');
$logger->setFormatter($emptyFormatter);

// 创建level过滤器对象
$lineFormatter = $hlog->lineFormatter('{date:Y-m-d:H:i} :{msg} ,file:{file}, line:{line},{class}->{fn} {n}');
$logger->setFormatter($lineFormatter);

$logger->addHandler($hlog->fileHandler('/home/hehe/www/logs/hehep.log',1024 * 5));
// 记录日志
$logger->error('error log message');
```

### 单行字符串日志格式器

[](#单行字符串日志格式器)

- 默认日志模版变量

```
date:当前系统时间,基本格式:{date:Y-m-d:H:i:s}
mdate:日志时间,基本格式:{date:Y-m-d:H:i:s}
msg:日志内容,基本格式:{msg}
level:日志级别,基本格式:{level}
file:记录日志时的文件路径,基本格式:file}
line:记录日志时的行数,基本格式:{line}
class:记录日志时的类名,基本格式:{class}
fn:记录日志时的方法名或函数名,基本格式:{fn}
cate:调用日志时位置(格式:类名:方法名),基本格式:{cate}
n:换行符,'\n',基本格式:{n}

```

- 示例代码

```
use hehe\core\hlogger\LogManager;
$hlog = new LogManager();
$logger = $hlog->newLogger();
// 创建单行字符串日志格式器
$lineFormatter = $hlog->lineFormatter('{date:Y-m-d:H:i} :{msg} ,file:{file}, line:{line},{class}->{fn} {n}');

// 创建预定义“default”日志格式器
$lineFormatter = $hlog->newFormatter('default');

$logger->setFormatter($lineFormatter);
```

日志上下文
-----

[](#日志上下文)

- 说明

```
基类:hehe\core\hlogger\base\LogContext
作用:日志上下文,比如记录日志时的任务ID,用户ID等

```

### 预定义日志上下文

[](#预定义日志上下文)

```
$conf = [
    'contexts'=>[
        'default'=>[
            'class'=>'hehe\core\hlogger\contexts\TraceContext',
            'skipClasses'=>[],// 跳过的类名,
            'skipFuns'=>[],// 跳过的函数名,
        ]
    ],

];
```

### 自定义日志上下文

[](#自定义日志上下文)

> 必须继承基类:hehe\\core\\hlogger\\base\\LogContext,并重写handle方法

```
namespace hehe\core\hlogger\contexts;

use hehe\core\hlogger\base\LogContext;

class LineContext extends LogContext
{
    public function handle():array
    {
        return [
            'user'=>'admin',
            'ip'=>'127.0.0.1'
        ];
    }
}
```

### 日志上下文示例

[](#日志上下文示例)

```
use hehe\core\hlogger\LogManager;
use \hehe\core\hlogger\contexts\TraceContext;
$hlog = new LogManager();
$logger = $hlog->newLogger();
// 创建单行字符串日志格式器
$lineFormatter = $hlog->lineFormatter('{date:Y-m-d:H:i},{msg} {user}:{ip},file:{file}, line:{line},{class}->{fn} {n}');

$logger->setFormatter($lineFormatter);

// 创建预定义“default”日志上下文
$defaultContext = $hlog->newContext('default');

// 快速创建traceContext日志上下文
$traceContext = $hlog->traceContext(["hlogger"]);
$logger->addContext($traceContext);

// new TraceContext 上下文
$traceContext = new \hehe\core\hlogger\contexts\TraceContext();
$logger->addContext($traceContext);
$logger->addContext(TraceContext::class);

// 添加闭包上下文
$logger->addContext(function(){
    return [
        'user'=>'admin',
        'ip'=>'127.0.0.1'
    ];
});

// 数组上下文
$logger->error('error log message',['goodid'=>'123']);
```

### trace上下文

[](#trace上下文)

> 基类:hehe\\core\\hlogger\\contexts\\TraceContext
> 变量:
> file:文件路径,基本格式:{file}
> line:行数,基本格式:{line}
> class:类名,基本格式:{class}
> fn:方法名,基本格式:{fn}

### 系统上下文

[](#系统上下文)

> 基类:hehe\\core\\hlogger\\contexts\\SysContext
> 变量:
> pid:进程ID,基本格式:{pid}
> tid:线程ID,基本格式:{tid}
> date:日期,基本格式:{date:Y-m-d:H:i}
> time:时间戳,微妙,基本格式:{time}
> maxMemory:最大内存,基本格式:{maxMemory}
> useMemory:当前脚本占用的内存,基本格式:{useMemory}
> n:换行符,'\\n',基本格式:{n}

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance47

Moderate activity, may be stable

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

616d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/fef1cea3ff1614a44fc4060212c8e03e14511610ae5482351a80a3b9f6d28e97?d=identicon)[chinahehex](/maintainers/chinahehex)

---

Top Contributors

[![139hehe](https://avatars.githubusercontent.com/u/42648391?v=4)](https://github.com/139hehe "139hehe (17 commits)")

### Embed Badge

![Health badge](/badges/hehex-hehep-hlogger/health.svg)

```
[![Health](https://phpackages.com/badges/hehex-hehep-hlogger/health.svg)](https://phpackages.com/packages/hehex-hehep-hlogger)
```

###  Alternatives

[psr/log

Common interface for logging libraries

10.4k1.2B9.1k](/packages/psr-log)[itsgoingd/clockwork

php dev tools in your browser

5.9k27.6M94](/packages/itsgoingd-clockwork)[graylog2/gelf-php

A php implementation to send log-messages to a GELF compatible backend like Graylog2.

41838.2M137](/packages/graylog2-gelf-php)[bugsnag/bugsnag-psr-logger

Official Bugsnag PHP PSR Logger.

32132.5M2](/packages/bugsnag-bugsnag-psr-logger)[consolidation/log

Improved Psr-3 / Psr\\Log logger based on Symfony Console components.

15462.2M7](/packages/consolidation-log)[datadog/php-datadogstatsd

An extremely simple PHP datadogstatsd client

19124.6M15](/packages/datadog-php-datadogstatsd)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
