一 介绍 。
hyperf/logger 组件是基于 psr/logger 实现的,默认使用 monolog/monolog 作为驱动,在 hyperf-skeleton 项目内默认提供了一些日志配置,默认使用 Monolog\Handler\StreamHandler, 由于 Swoole 已经对 fopen, fwrite 等函数进行了协程化处理,所以只要不将 useLocking 参数设置为 true,就是协程安全的。
二 log 安装
composer require hyperf/logger
三 配置。
config/autoload/logger.php
<?php
declare(strict_types=1);
use Monolog\Handler;
use Monolog\Formatter;
use Monolog\Logger;
$formatter = [
'class' => Formatter\LineFormatter::class,
'constructor' => [
'format' => "||%datetime%||%channel%||%level_name%||%message%||%context%||%extra%\n",
'dateFormat' => null,
'allowInlineLineBreaks' => true,
],
];
return [
'default' => [
'handlers' =>
[
[
'class' => Handler\RotatingFileHandler ::class,
'constructor' => [
'filename' => BASE_PATH . '/runtime/logs/hyperf.log',
'level' => Logger::INFO,
],
'formatter' => $formatter
],
[
'class' => Handler\RotatingFileHandler ::class,
'constructor' => [
'filename' => BASE_PATH . '/runtime/logs/hyperf.log',
'level' => Logger::DEBUG,
],
'formatter' => $formatter
],
[
'class' => Handler\RotatingFileHandler ::class,
'constructor' => [
'filename' => BASE_PATH . '/runtime/logs/hyperf-debug.log',
'level' => Logger::DEBUG,
],
'formatter' => $formatter
],
]
],
];
4 使用
use Hyperf\Logger\LoggerFactory;
use Psr\Log\LoggerInterface;
class DebugController extends AbstractController
{
protected LoggerInterface $logger;
public function __construct(LoggerFactory $loggerFactory) {
// 第一个参数对应日志的 name, 第二个参数对应 config/autoload/logger.php 内的 key
$this->logger = $loggerFactory->get('log', 'default');
}
public function index()
{
$method = $this->request->getMethod();
// Do something.
$this->logger->info("request-info \t ", $this->request->query());
// $this->logger->debug("request-debug \t ", $this->request->query());
return [
'method' => $method,
'message' => "DebugController xxx",
];
}