sql >> データベース >  >> NoSQL >> MongoDB

Symfony2とDoctrineを使用してログをMongoDBに保存するようにMonologを構成する方法

    完全な構成

    mongodb_server: "mongodb://localhost:27017"
    mongodb_username: "vagrant"
    mongodb_password: "password"
    mongodb_database: "testdb"
    
    # Doctrine2 MongoDB Bundle
    # http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html
    doctrine_mongodb:
        default_database: %mongodb_database%
        connections:
        default:
            server: %mongodb_server%
            options:
                password: %mongodb_password%
                username: %mongodb_username%
                db: %mongodb_database%
                connect: true
        log:
            server: %mongodb_server%
            options:
                password: %mongodb_password%
                username: %mongodb_username%
                db: %mongodb_database%
                connect: true
        document_managers:
        default:
            auto_mapping: true
        log:
            auto_mapping: false
            logging: false
    
    mongolog:
        class: Doctrine\MongoDB\Connection
        factory_service: doctrine_mongodb.odm.log_connection
        factory_method: getMongoClient
    
    monolog:
        handlers:
        main:
            type:   stream
            path:   "%kernel.logs_dir%/%kernel.environment%.log"
            level:  debug
        console:
            type:   console
            bubble: false
            verbosity_levels:
                VERBOSITY_VERBOSE: INFO
                VERBOSITY_VERY_VERBOSE: DEBUG
            channels: ["!doctrine"]
        console_very_verbose:
            type:   console
            bubble: false
            verbosity_levels:
                VERBOSITY_VERBOSE: NOTICE
                VERBOSITY_VERY_VERBOSE: NOTICE
                VERBOSITY_DEBUG: DEBUG
            channels: ["doctrine"]
        mongo:
            type:   mongo
            level:  notice # change as desired
            mongo:
                id: mongolog
                database: %mongodb_database%
                collection: logs
    
    monolog:
        handlers:
        main:
            type:         fingers_crossed
            action_level: error
            handler:      mongo
        nested:
            type:  stream
            path:  "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug
        console:
            type:  console
        mongo:
            type: mongo
            level: notice
            mongo:
                id: mongolog
                database: %mongodb_database%
                collection: logs
    

    それでは、PHP通知をトリガーして、MongoDBに正しく保存されるかどうかを確認しましょう:-)

    <?php trigger_error('hello world!', E_USER_NOTICE);

    モノローグレコードへのHTTPリクエストヘッダーの追加

    kernel.listener.exception_listener:
        class: AppBundle\EventListener\ExceptionListener
        arguments:
            - @logger
        tags:
            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
    
    <?php
    
    namespace AppBundle\EventListener;
    
    use Monolog\Handler\MongoDBHandler;
    use Symfony\Bridge\Monolog\Logger;
    use Symfony\Component\Debug\ExceptionHandler;
    use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
    
    /**
     * Class ExceptionListener
     * @package AppBundle\EventListener
     * @author Francesco Casula <[email protected]>
     */
    class ExceptionListener extends ExceptionHandler
    {
        /**
         * @var Logger
         */
        private $logger;
    
        /**
         * @param Logger $logger
         */
        public function __construct(Logger $logger)
        {
            $this->logger = $logger;
        }
    
        /**
         * @return Logger
         */
        public function getLogger()
        {
            return $this->logger;
        }
    
        /**
         * @param GetResponseForExceptionEvent $event
         */
        public function onKernelException(GetResponseForExceptionEvent $event)
        {
            foreach ($this->getLogger()->getHandlers() as $handler) {
                if ($handler instanceof MongoDBHandler) {
                    $handler->pushProcessor(function (array $record) use ($event) {
                        $record['extra']['headers'] = $event->getRequest()->headers->all();
                        return $record;
                    });
    
                    break;
                }
            }
        }
    }
    



    1. 'ObjectId()'ラッパーを含めずにmongo ObjectId .toStringを変換する方法-値だけですか?

    2. MongoDB Seattle 2014

    3. mongoシェルからファイルを読み取る

    4. MongoDBドライバー使用時のjava.lang.NoClassDefFoundError