三 hyperf 写日志

614 阅读1分钟

一 介绍 。

hyperf/logger 组件是基于 psr/logger 实现的,默认使用 monolog/monolog 作为驱动,在 hyperf-skeleton 项目内默认提供了一些日志配置,默认使用 Monolog\Handler\StreamHandler, 由于 Swoole 已经对 fopenfwrite 等函数进行了协程化处理,所以只要不将 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",
        ];
    }

image.png