Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php declare(strict_types=1);
2
 
3
/*
4
 * This file is part of the Monolog package.
5
 *
6
 * (c) Jordi Boggiano <j.boggiano@seld.be>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
 
12
namespace Monolog\Handler;
13
 
14
use MongoDB\Driver\BulkWrite;
15
use MongoDB\Driver\Manager;
16
use MongoDB\Client;
17
use Monolog\Logger;
18
use Monolog\Formatter\FormatterInterface;
19
use Monolog\Formatter\MongoDBFormatter;
20
 
21
/**
22
 * Logs to a MongoDB database.
23
 *
24
 * Usage example:
25
 *
26
 *   $log = new \Monolog\Logger('application');
27
 *   $client = new \MongoDB\Client('mongodb://localhost:27017');
28
 *   $mongodb = new \Monolog\Handler\MongoDBHandler($client, 'logs', 'prod');
29
 *   $log->pushHandler($mongodb);
30
 *
31
 * The above examples uses the MongoDB PHP library's client class; however, the
32
 * MongoDB\Driver\Manager class from ext-mongodb is also supported.
33
 */
34
class MongoDBHandler extends AbstractProcessingHandler
35
{
36
    /** @var \MongoDB\Collection */
37
    private $collection;
38
    /** @var Client|Manager */
39
    private $manager;
40
    /** @var string */
41
    private $namespace;
42
 
43
    /**
44
     * Constructor.
45
     *
46
     * @param Client|Manager $mongodb    MongoDB library or driver client
47
     * @param string         $database   Database name
48
     * @param string         $collection Collection name
49
     */
50
    public function __construct($mongodb, string $database, string $collection, $level = Logger::DEBUG, bool $bubble = true)
51
    {
52
        if (!($mongodb instanceof Client || $mongodb instanceof Manager)) {
53
            throw new \InvalidArgumentException('MongoDB\Client or MongoDB\Driver\Manager instance required');
54
        }
55
 
56
        if ($mongodb instanceof Client) {
57
            $this->collection = $mongodb->selectCollection($database, $collection);
58
        } else {
59
            $this->manager = $mongodb;
60
            $this->namespace = $database . '.' . $collection;
61
        }
62
 
63
        parent::__construct($level, $bubble);
64
    }
65
 
66
    protected function write(array $record): void
67
    {
68
        if (isset($this->collection)) {
69
            $this->collection->insertOne($record['formatted']);
70
        }
71
 
72
        if (isset($this->manager, $this->namespace)) {
73
            $bulk = new BulkWrite;
74
            $bulk->insert($record["formatted"]);
75
            $this->manager->executeBulkWrite($this->namespace, $bulk);
76
        }
77
    }
78
 
79
    /**
80
     * {@inheritDoc}
81
     */
82
    protected function getDefaultFormatter(): FormatterInterface
83
    {
84
        return new MongoDBFormatter;
85
    }
86
}