• 应用日志
    • 配置
      • 日志格式
      • 日志处理器
      • 日志配置
    • 使用

    应用日志

    配置

    在bean.php 里面配置应用日志的参数:

    1. return [
    2. 'lineFormatter' => [
    3. 'format' => '%datetime% [%level_name%] [%channel%] [%event%] [tid:%tid%] [cid:%cid%] [traceid:%traceid%] [spanid:%spanid%] [parentid:%parentid%] %messages%',
    4. 'dateFormat' => 'Y-m-d H:i:s',
    5. ],
    6. 'noticeHandler' => [
    7. 'class' => FileHandler::class,
    8. 'logFile' => '@runtime/logs/notice.log',
    9. 'formatter' => \bean('lineFormatter'),
    10. 'levels' => [
    11. Logger::NOTICE,
    12. Logger::INFO,
    13. Logger::DEBUG,
    14. Logger::TRACE,
    15. ],
    16. ],
    17. 'applicationHandler' => [
    18. 'class' => FileHandler::class,
    19. 'logFile' => '@runtime/logs/error.log',
    20. 'formatter' => \bean('lineFormatter'),
    21. 'levels' => [
    22. Logger::ERROR,
    23. Logger::WARNING,
    24. ],
    25. ],
    26. 'logger' => [
    27. 'flushRequest' => false,
    28. 'enable' => false,
    29. 'handlers' => [
    30. 'application' => \bean('applicationHandler'),
    31. 'notice' => \bean('noticeHandler'),
    32. ],
    33. ]
    34. ];

    此配置也是框架默认的配置文件,把应用日志按日志级别分别写到两个不同的文件里面。

    日志格式

    lineFormatter 配置日志格式:

    • format 日志输到文件格式
    • dateFormat 日志输出时间格式

    日志处理器

    noticeHandlerapplicationHandler 处理器,应用日志可以配置多个处理器,处理器可以把日志输出到文件、邮箱、第三方系统。

    配置详细参数:

    • class 配置采用哪种类型的,框架默认提供文件,用户可以自己扩展其它类型
    • logFile 输出日志文件路径,支持别名
    • formatter 日志输出使用日志格式,就是之前配置的日志格式
    • levels 支持日志输出的日志级别

    日志配置

    logger 日志配置:

    • name 名称
    • flushInterval 日志输出频率默认 1
    • flushRequest 是否每个请求结束输出日志开,默认 false
    • enable 是否开启日志,默认 false
    • json 是否 JSON 格式输出,默认 false
    • items 日志其它数据,配置是一个数组集合

    使用

    开发者直接通过 Log 类静态方法,打印日志。应用日志根据不同的需求分为如下不同的日志记录:

    • emergency
    • debug
    • alert
    • info
    • warning
    • error
    1. // Tag start
    2. Log::profileStart('tagName');
    3. Log::debug('this %s log', 'debug');
    4. Log::info('this %s log', 'info');
    5. Log::warning('this %s log', 'warning');
    6. Log::error('this %s log', 'error');
    7. Log::alert('this %s log', 'alert');
    8. Log::emergency('this %s log', 'emergency');
    9. // Pushlog
    10. Log::pushLog('key', 'value');
    11. Log::pushLog('key', ['value']);
    12. Log::pushLog('key', 'value');
    13. // Tag end
    14. Log::profileEnd('tagName');
    15. // Counting
    16. Log::counting('mget', 1, 10);
    17. Log::counting('mget', 2, 10);
    18. // 2019-05-11 06:57:27 [info] [swoft] [request] [tid:4] [cid:4] [traceid:] [spanid:] [parentid:] trace[LogController.php:29,App\Http\Controller\LogController->test] info message
    19. // 2019-05-11 06:57:27 [debug] [swoft] [request] [tid:4] [cid:4] [traceid:] [spanid:] [parentid:] trace[LogController.php:35,App\Http\Controller\LogController->test] this debug log
    20. // 2019-05-11 06:57:27 [info] [swoft] [request] [tid:4] [cid:4] [traceid:] [spanid:] [parentid:] trace[LogController.php:36,App\Http\Controller\LogController->test] this info log
    21. // 2019-05-11 06:57:27 [warning] [swoft] [request] [tid:4] [cid:4] [traceid:] [spanid:] [parentid:] trace[LogController.php:37,App\Http\Controller\LogController->test] this warning log
    22. // 2019-05-11 06:57:27 [error] [swoft] [request] [tid:4] [cid:4] [traceid:] [spanid:] [parentid:] trace[LogController.php:38,App\Http\Controller\LogController->test] this error log
    23. // 2019-05-11 06:57:27 [notice] [swoft] [request] [tid:4] [cid:5] [traceid:] [spanid:] [parentid:] [8.52(ms)] [27(MB)] [/log/test] [key=value key=["value"] key=value] profile[tagName=5.02(ms)/2] counting[mget=3/20]

    日志级别可以根据自己的业务定义不同的含义,debug 日志级别只有开启 APP_DEBUG 默认才会输出. notice 日志级别,每个请求结束框架自动追加上的一条日志,该条日志会记录这次请求,框架和业务运行的详细信息,比如数据库操作记录、缓存操作记录以及请求信息。日志方法可以像 sprintf() 函数一样传递参数,底层自动封装。

    除常用的日志级别,框架还提供 pushLog profile

    • pushLog 用于记录请求执行过程中的参数,notice 日志里面可以查看
    • profile 使用的时,需要定义一个标记,标记开始和结束为止,该方法可以记录标记之间运行时间,notice 日志里面可以查看。