hyperf: 自定义日志类

一,定义一个日志group

config/autoload/logger.php

    'daily' => [
        'handler' => [
            'class' => Monolog\Handler\RotatingFileHandler::class,
            'constructor' => [
                'filename' => BASE_PATH . '/runtime/logs/daily.log',
                'level' => Monolog\Logger::INFO,
            ],
        ],
        'formatter' => [
            'class' => Monolog\Formatter\LineFormatter::class,
            'constructor' => [
                'format' => "[%datetime%] %channel% %level_name%:%message%\n",
                'dateFormat' => 'Y-m-d H:i:s',
                'allowInlineLineBreaks' => true,
            ],
        ],
    ],

说明:此处的指定格式是为了避免写日志时每行后面有两个空数组符号,
为什么会出现空数组符号,是因为日志默认的format为:

"||%datetime%||%channel%||%level_name%||%message%||%context%||%extra%\n"

有为空的项时,则显示为空数组 []

二,定义日志类

app/Log/DailyLog.php

<?php
namespace App\Log;

use Hyperf\Context\ApplicationContext;
use Hyperf\Logger\LoggerFactory;

class DailyLog
{
    /**
     * @var \Psr\Log\LoggerInterface
     */
    protected $logger;

    public function __construct()
    {
        $this->logger = ApplicationContext::getContainer()->get(LoggerFactory::class)->get("daily","daily");
    }

    public function info($content){
        $this->logger->info($content);
    }
}

 

三,调用日志类

controller/ImageController.php

    public function imagedetail(RequestInterface $request, ResponseInterface $response) {

        //写日志
        //$this->logger->info("测试写一条日志",$request->all());

        $loggerFile = new DailyLog();
        $loggerFile->info("测试写一条日志");

        $data = [
            'key' => 'value'
        ];
        return $response->json($data);
    }

日志格式:

[2025-02-07 17:45:44] daily INFO:测试写一条日志

 

posted @ 2025-02-09 19:17  刘宏缔的架构森林  阅读(84)  评论(0)    收藏  举报