Monolog使用MongoDB处理日志

Monolog是php下比较全又容易扩展的记录日志组件。目前有包括Symfony 、Laravel、 CakePHP等诸多知名php框架都内置了Monolog。Monolog可以把你的日志发送到文件,sockets,收件箱,数据库和各种web服务器上。一些特殊的组件可以给你带来特殊的日志策略。

PHP框架中引入扩展包

#  安装 monolog
composer require monolog/monolog
# 安装 mongodb
composer require  mongodb/mongodb

封装MongoDB和Monolog代码:

=')) {
            $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
            $idx       = 0 + $backtraceOffset;
        } else {
            $backtrace = debug_backtrace();
            $idx       = 1 + $backtraceOffset;
        }

        $trace = basename($backtrace[$idx]['file']) . ":" . $backtrace[$idx]['line'];
        if (!empty($backtrace[$idx + 1]['function'])) {
            $trace .= '##';
            $trace .= $backtrace[$idx + 1]['function'];
        }

        $message = sprintf('==> LOG: %s -- %s', $message, $trace);

        return $logger->addRecord($level, $message, $context);
    }

    /**
     * 创建日志
     * @param $name
     * @return mixed
     */
    private static function createLogger($name)
    {
        if (empty(self::$loggers[$name])) {
            // 根据业务域名与方法名进行日志名称的确定
            $category = $_SERVER['SERVER_NAME'];
            // 创建日志
            $logger = new Logger($category);
            // 日志相关操作(mongodb配置信息可配置到配置文件)
            $client = new Client('mongodb://localhost:27017');
            $handler = new MongoDBHandler($client, 'logs', 'prod');
            $logger->pushHandler($handler);

            self::$loggers[$name] = $logger;
        }
        return self::$loggers[$name];
    }
}

使用示例

 * 
 *      使用示例,首先在配置文件中配置mongodb的连接URI
 *      示例:'mongodb://localhost:27017'
 *      代码逻辑中直接引入命名空间
 *      use App\Core\Lib\Monolog;
 *
 *      //@param string $channel 一个日志实例通道
 *      //@param array $arguments 日志内容
 *      Monolog::debug('test', ["名称:{$storagecount}"]);
 *      Monolog::info('test', ["名称:{$storagecount}"]);
 *      Monolog::notice('test', ["名称:{$storagecount}"]);
 *      Monolog::warning('test', ["名称:{$storagecount}"]);
 *      Monolog::error('test', ["名称:{$storagecount}"]);
 *      Monolog::criticle('test', ["名称:{$storagecount}"]);
 *      Monolog::alert('test', ["名称:{$storagecount}"]);
 *      Monolog::emergency('test', ["名称:{$storagecount}"]);
 * 

了解更多Monolog请参见:https://www.jianshu.com/p/b99dc5c3b760

你可能感兴趣的:(Monolog使用MongoDB处理日志)