Laravel 5.6+ 使用 MongoDB 存储框架日志

PHP   Laravel  

第1步
电脑或服务器安装mongodb数据库
mongodb官网
菜鸟教程

第2步
安装 PHP mongodb 扩展

第3步
安装高度封装的包装库;使用 MongoDB 官方提供即可
官方
github
$ composer require mongodb/mongodb

第4步
打开 config/logging.php,修改其 channels

  1. return [
  2. // ...
  3. 'channels' => [
  4. // ...
  5. 'mongodb' => [ // 此处可以根据需求调整
  6. 'driver' => 'custom', // 此处必须为 custom
  7. 'via' => CreateCustomLogger::class, // 当 driver 设置为 custom 时,使用 via 配置项所指向的工厂类创建 logger
  8. // 以下 env 配置名可以根据需求调整
  9. 'server' => env('LOG_MONGO_SERVER', 'mongodb://localhost:27017'),
  10. 'database' => env('LOG_MONGO_DB', 'logs'),
  11. 'collection' => env('LOG_MONGO_COLLECTION', 'logs'),
  12. 'level' => env('LOG_MONGO_LEVEL', 'debug'), // 日志级别
  13. ],
  14. ],
  15. ];

接着你需要将 default 修改为 mongodb,也可以修改 .env。

  1. return [
  2. 'default' => env('LOG_CHANNEL', 'mongodb'), // 我直接将默认值修改为 mongodb,也就是 channels 内新增的配置项。
  3. // ...
  4. ]

找个合适的位置(我使用 app/Logging)创建 CreateCustomLogger.php。

  1. <?php
  2. namespace App\Logging;
  3. use Monolog\Logger;
  4. use Monolog\Handler\MongoDBHandler;
  5. use Monolog\Processor\WebProcessor;
  6. class CreateCustomLogger
  7. {
  8. /**
  9. * Create a custom Monolog instance.
  10. *
  11. * @param array $config
  12. * @return \Monolog\Logger
  13. */
  14. public function __invoke(array $config)
  15. {
  16. $logger = new Logger(''); // 创建 Logger
  17. $handler = new MongoDBHandler( // 创建 Handler
  18. new \MongoDB\Client($config['server']), // 创建 MongoDB 客户端(依赖 mongodb/mongodb)
  19. $config['database'],
  20. $config['collection']
  21. );
  22. $handler->setLevel($config['level']);
  23. $logger->pushHandler($handler); // 挂载 Handler
  24. $logger->pushProcessor(new WebProcessor($_SERVER)); // 记录额外的请求信息
  25. return $logger;
  26. }
  27. }

好了,接下来可以执行 php artisan tinker,输入 Log::warning(…) 测试你的成果了。

别忘记把 MongoDB 服务启动。

原文链接:https://learnku.com/articles/22329



评论 0

发表评论

Top