IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Monolog et doctrine method info undefined [3.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Par défaut Monolog et doctrine method info undefined
    Hello

    J'ai suivis ce tuto : https://nehalist.io/logging-events-t...se-in-symfony/

    Mais je n'y arrive pas j'ai l'erreur :

    Attempted to call an undefined method named "info" of class "AcMarche\LoggerBundle\Service\MonologDBHandler

    Je comprends pas pq j'ai bien tout suivi...

    Mon service.yml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    services:
        monolog.db_handler:
            class: AcMarche\LoggerBundle\Service\MonologDBHandler
            arguments: ['@doctrine.orm.entity_manager']
    mon config_dev.yml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    monolog:
        channels: ['db']
        handlers:
            main:
                type: stream
                path: '%kernel.logs_dir%/%kernel.environment%.log'
                level: debug
                channels: ['!event']
            console:
                type: console
                process_psr_3_messages: false
                channels: ['!event', '!doctrine', '!console']        
            db:
                channels: ['db']
                type: service
                id: monolog.db_handler
    Mon handler:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    use AcMarche\LoggerBundle\Entity\Log;
    use Doctrine\ORM\EntityManagerInterface;
    use Monolog\Handler\AbstractProcessingHandler;
     
    class MonologDBHandler extends AbstractProcessingHandler
    {
        /**
         * @var EntityManagerInterface
         */
        protected $em;
     
        /**
         * MonologDBHandler constructor.
         * @param EntityManagerInterface $em
         */
        public function __construct(EntityManagerInterface $em)
        {
            parent::__construct();
            $this->em = $em;
        }
     
        /**
         * Called when writing to our database
         * @param array $record
         */
        protected function write(array $record)
        {
            $logEntry = new Log();
            $logEntry->setMessage($record['message']);
            $logEntry->setLevel($record['level']);
            $logEntry->setLevelName($record['level_name']);
            $logEntry->setExtra($record['extra']);
            $logEntry->setContext($record['context']);
     
            $this->em->persist($logEntry);
            $this->em->flush();
        }
    }
    Mon controlleur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /**
         * @Route("/")
         */
        public function indexAction()
        {
            $log = $this->get('monolog.db_handler');
            $log->info(
                'something happened',
                [
                    'foo' => 'bar',
                ]
            );
     
            return $this->render('AcMarcheLoggerBundle:Default:index.html.twig');
        }
    Bref du gros copier coller j'ai du zapper un truc quelque part...

    Merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Es-tu sûr que ta classe MonologDBHandler possède la méthode info?

    info() est une méthode de la classe Logger, pas d'une classe Handler.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Ce tuto est incorrect et n'a même pas été relu. Il enregistre un service monolog.db_handler mais utilise un service monolog.logger.db, et utilise info() alors qu'il veut probablement utiliser la méthode write(). Bref, il a écrit ce code sans même le tester.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Par défaut
    Es-tu sûr que ta classe MonologDBHandler possède la méthode info?
    Non elle possède pas la méthode, je pense que cette méthode est disponible grâce à la config dans config_dev.yml

    Ce tuto est incorrect et n'a même pas été relu. Il enregistre un service monolog.db_handler mais utilise un service monolog.logger.db, et utilise info() alors qu'il veut probablement utiliser la méthode write()
    Oui il y a une erreur quand il appel son service, non la méthode write de doit pas être appelé car mongo a des méthodes comme info, debug, warning...
    le but du write étant d'enregistrer les logs en db et non en fichier

    J'ai trouvé un autre tuto dans le même genre mais ça va pas mieux :-(

    http://www.inanzzz.com/index.php/pos...onolog-handler

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Par défaut
    Bon j'ai trouvé

    En faite je dois bien appeler ce service comme dans le tuto

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $log = $this->get('monolog.logger.db');

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Par défaut
    Et pour compléter, grâce à la magie de l' autowire

    oubliez les déclarations dans service.yml
    et dans config.yml mettez le nom de votre classe :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    monolog:
       db:
                type: service
                id: AcMarche\LoggerBundle\Service\MonologDBHandler
                channels: ['db']

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 07/10/2010, 18h53
  2. Erreur "the method is undefined for the type"
    Par youness78 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 13/10/2009, 14h56
  3. [C#] Comment recuperer des infos en dehors de la methode
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/06/2006, 01h16
  4. Can't call method "mail" on an undefined value
    Par hpalpha dans le forum Modules
    Réponses: 2
    Dernier message: 18/01/2006, 11h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo