2017-06-09 2 views
1

Je travaille sur le projet Moodle.Je veux y at-il un moyen que je peux écrire mon erreur dans le fichier Log.txt en PHP.Comment puis-je écrire une fonction personnalisée qui va écrire une erreur dans mon fichier journal dans Php?

Ci-dessous est mon code

drill_auto_enrolluser classe étend \ core \ tâche \ scheduled_task {

public function execute() { 

    global $DB; 
    $name=""; 
    $description=""; 
    $descriptionformat =""; 
    $userid=""; 
    $templateid=""; 
    $timecreated=""; 
    $timemodified=0; 
    $origtemplateid=NULL; 
    $status=0; 
    $duedate=0; 
    $reviewerid=NULL;  

     $DATA = $DB->get_recordset_sql ("Select name,description,descriptionformat,userid,templateid from vw_new_user_lp"); 

      foreach ($DATA as $id => $rec) { 

       $record = new \stdClass();           
          $record ->name = $rec->name; 
          $record ->description= $rec->description; 
          $record ->descriptionformat=$rec->descriptionformat; 
          $record ->userid= $rec->userid;  
          $record->origtemplateid=$origtemplateid; 
          $record ->templateid=$rec->templateid; 
          $record->status= $status; 
          $record->duedate= $duedate; 
          $record->reviewerid= $reviewerid; 
          $record->timecreated= time(); 
          $record->timemodified = $timemodified; 
          $record->usermodified = $userid; 

       $DB->insert_record('competency', $record); 

     } 

} 

}

+0

Qu'avez-vous essayé? Où est le code? – LSerni

+0

Salut, J'ai ajouté mon code Php Moodle.Yet j'ai écrit un code d'enregistrement d'erreur. –

Répondre

0

Dans ce cas, vous devez savoir comment l'erreur est signalée. Cela est généralement effectué avec une exception ou une valeur de retour . Dans le premier cas, si l'exception n'est pas détectée, l'application abandonne (ce qui est normal).

Par exemple, en supposant que l'insert lance une exception de la classe MoodleDatabaseException (bien sûr, vous devez vérifier ce que exception est en fait jeté):

try { 
    $DB->insert_record('competency', $record); 
} catch (\MoodleDatabaseException $err) { 
    myErrorLog($err->getMessage()); 
} 

Dans le cas contraire, si la fonction retourne par exemple vrai ou faux, vous iriez:

if (true !== $DB->insert_record('competency', $record)) { 
    myErrorLog($DB->functionThatReturnsLastErrorMessage()); 
} 

Dans les deux cas, vous avez besoin d'une fonction myErrorLog. Je pense que Moodle a une facilité d'exploitation forestière et you may want to check it out, et peut-être poser une question de suivi plus détaillée. Vous pouvez également décider d'utiliser the Apache error_log facility en fonction de ce dont vous avez besoin. Dans un pincement, vous pouvez utiliser un fichier journal texte:

function myErrorLog($message = 'no message') { 
    $date = date('Y-m-d H:i:s'); 
    $fp = fopen('/var/log/moodle-errors.log', 'a'); 
    if (!$fp) { 
     throw new \Exception("Could not open log file! Permission error?"); 
    } 
    fwrite($fp, $date . ' ' . $message . "\n"); 
    fclose($fp); 
} 

Le code ci-dessus ne vous inquiétez pas sur le verrouillage multi-utilisateur, qui peut être problématique. C'est bon pour un débogage rapide et sale; sinon, vous devez utiliser toutes les fonctions fournies (ou envisager d'intégrer Log4Php ou Monolog, peut-être, mais cela ressemble à un projet exigeant).

Mise à jour

Comme je l'ai pas été trop clair (anglais n'est pas ma langue maternelle), vous vous retrouvez avec le problème de pour définir la fonction myErrorLog afin de le rendre disponible partout, mais ne jamais l'avoir défini deux fois pour éviter les erreurs. Pour un débogage rapide, vous pouvez remplacer myErrorLog par error_log qui sera affiché dans le fichier journal des erreurs Apache, évitant ainsi à la fois les problèmes de concurrence et les problèmes d'autorisation.

+0

Merci pour la réponse, je ne veux pas utiliser la fonction d'enregistrement d'erreur de module. Je vais essayer votre fonction personnalisée.Si un doute commentera ici. –

+0

Merci, LSemi..Vos mots anglais sont faciles à comprendre.Je suis confronté à un problème d'autorisation.Attention: fopen (/moodle_error.txt): impossible d'ouvrir le flux: Autorisation refusée dans/home/onlin200/public_html/mod/certificate/classes /task/errorlogging_function.php on line 13 Tâche planifiée a échoué: AutoEnroll utilisateur dans les cours de compétence (mod_certificate \ task \ drill_auto_enrolluser), Impossible d'ouvrir le fichier journal! Erreur d'autorisation? –

+0

Vous écrivez à /, et le serveur Web n'a pas la permission. Essayez /tmp/moodle-errors.txt ou ajoutez un point avant le chemin: ./moodle_error.txt. – LSerni