Welk bestandspad en regelnummer worden in het logboek weergegeven?

Ik heb een logboekbibliotheek geschreven die items aan een bestand of uitvoerstroom toevoegt.

Wanneer het item aan het logboek wordt toegevoegd, bevat het ook contextinformatie, zoals het bestand en het regelnummer van het gesprek dat is gemaakt om het item toe te voegen.

Mijn vraag is: moet ik het bestandspad en het regelnummer gebruiken van het gesprek dat het item heeft toegevoegd, of de beller die de gebeurtenis heeft geactiveerd om het bericht te loggen?

trigger.php:

<?php

    $do->something(); #line 2

do.php

<?php

    class Do
    {
        public function something ()
        {
            $this->log->add('Did something.', E_USER_NOTICE); # line 6
        }
    }

Op dit moment verschijnt de melding 'iets gedaan'. is vastgelegd als afkomstig van do.php regel 6. Is het beter om de logging-klasse te veranderen om te zeggen dat het bericht afkomstig was van trigger.php regel 2?

Bewerken

Een paar dingen verduidelijken.

  1. De bibliotheek bevat de volledige oproepstack in het logboekitem. Dus in meer feature-rijke logging classes, kun je veel meer zien dan wat het bovenstaande voorbeeld met zich meebrengt.
  2. De bibliotheek maakt gebruik van logging-niveaus en filtert niveaus uit die niet nodig zijn. Het bovenstaande voorbeeld laat dat niet zien, maar je kunt de bibliotheek zelf wel bekijken om zeker te weten.

Helaas was ik niet duidelijk over hoe de boodschap in dit ene scenario wordt weergegeven. In dit zeer kleine scenario worden slechts één bestandspad en één regel weergegeven. Ervan uitgaande dat dit niet kon worden gewijzigd , welk bestandspad en regelnummer zou worden vastgelegd?

Dankjewel voor je hulp!

0
Zal regel 6 u voldoende informatie geven? als het alleen regel 6 zegt, hoe weet u waar het vandaan komt ?? als u de Do-klasse op meerdere verschillende plaatsen gebruikt en altijd lijn 6 zegt die niet erg nuttig lijkt
toegevoegd de auteur dm03514, de bron

1 antwoord

En wat als je drie niveaus hebt in plaats van twee? Wat als je er vier hebt? Ik raad u aan om te gaan met de conventionele praktijk om de regel te volgen waar de daadwerkelijke log() -aanroep verschijnt.

class client
{
  public function get_some_data()
  {
    $data = $this->get_my_data();

    if (empty($data)) {
      $this->log->add('no data in sight');
    }

   //lots of processing

    if ($something) {
      $this->log->add('data was corrupted');
    }
  }
}

//...

$client->get_some_data();

Als u alleen de oproep op het hoogste niveau registreerde, wist u alleen dat dit gebeurde in get_some_data (), maar niet waar precies. U denkt misschien "Ja, maar ik kan het vinden met behulp van de exacte fout die werd vastgelegd", maar als u logs aan het graven bent om een ​​probleem op te sporen dat niet echt is wat u wilt doen.

Als u meerdere oproepen naar deze functie hebt en u wilt meer informatie over welke lijn u hebt geregistreerd, kunt u een minimale stapeltracering naast uw logboek opslaan, zie debug_backtrace() . Het kan zo minimaal zijn als

2011-12-25 17:02:37 ERROR "data was corrupted" at /path/client.php:6 (called from /path/somefile.php:57)

Ik zou ook sterk aanbevelen om een ​​ander logniveau toe te voegen, omdat de logging die u wilt in dev/debug-situatie niet degene is die u in de productie wilt.

1
toegevoegd
Bedankt, ik heb in mijn vraag een paar dingen verduidelijkt. Wat ik hiervan wegneem, is dat ik beide in dit voorbeeld moet opnemen?
toegevoegd de auteur Kevin Herrera, de bron