log4perl

log4perl - Perl - Programmation

Marsh Posté le 11-05-2007 à 08:51:13    

salut,
 
Dans mon script, j'utilise log4perl pour logger tous ce que je fais :

Code :
  1. $prod_logger->info("..." );


 
mais le truc c'est que si je fait une connexion à une base ou j'ouvre un fichier, j'utilise cela (or die) :

Code :
  1. $dbh = DBI->connect("dbi:Oracle:$dbname", $user, $passwd) or
  2. die "Database connection not made: $DBI::errstr";


 
si jamais la connexion plante alors le script s'arrete mais je n'aurai pas cause de l'arret du script dans mon fichier de log;
 
Comment pourrai je faire cela ?
 
Merci.

Reply

Marsh Posté le 11-05-2007 à 08:51:13   

Reply

Marsh Posté le 11-05-2007 à 09:58:34    

ne pas utiliser die comme un bourrin me paraitrait une bonne piste à explorer...

Reply

Marsh Posté le 11-05-2007 à 10:21:33    

oui c'est claire
mais comment je peux avoir le code retour d'une connexion ou d'une deconnexion pour pouvoir par la suite le mettre dans une varibale et faire un test

Reply

Marsh Posté le 11-05-2007 à 11:35:51    

mais tu l'as déjà dans dbh [:w3c compliant]
je cite la doc:

Citation :

connect
Establishes a database connection, or session, to the requested $data_source. Returns a database handle object if the connection succeeds. Use $dbh->disconnect to terminate the connection.

 

If the connect fails (see below), it returns undef and sets both $DBI::err and $DBI::errstr. (It does not explicitly set $!.) You should generally test the return status of connect and print $DBI::errstr if it has failed.


Message édité par anapajari le 11-05-2007 à 11:36:30
Reply

Marsh Posté le 11-05-2007 à 12:36:28    

j'ai capté en faite quand je fait mon connect, je ne fais pas de "or die..." apres
mais je teste si la variable $DBI::err est defini donc j'ai un code
et j'affiche la nature du message avec cela $DBI::errstr;
un truc dans ce genre

Code :
  1. if (defined($DBI::err))
  2. {
  3. $prod_logger->error("echec de la connexion" );
  4. $prod_logger->error("Nature de l erreur : $DBI::errstr);
  5. exit 1;
  6. }
  7. else
  8. {
  9. $prod_logger->info("Connexion etablie);
  10. }


donc du coup je peux utiliser log4perl et afficher le bon message d'erreur avec la nature du message dans mon fichier de log;
et je peux proceder ainsi pour l'execution des requete et la deconnexion.


Message édité par donny3 le 11-05-2007 à 12:36:55
Reply

Marsh Posté le 11-05-2007 à 12:57:27    

je viens de me rendre compte que pour les requete, ca va poser un probleme, parceque si jamais la requete est mal saisi ( un champ mal orthogrphié) ca va planter car le prepare ne passera pas;
donc en gros pour les requete je teste apres le prepare et j'aurai dans mon shell deux fois l'erreur oracle à l'affichage, celle de dbd et celle de dbd que j'aurai mise dans mon log

Reply

Marsh Posté le 11-05-2007 à 13:08:55    

j'oubli le message precedent
en faite il faut juste que je teste l'execute de la requete et encore;
si le prepare plante, c'est que la personne à mal saisi le script sql de la requete et comme il va etre en dure et ne changera pas j'ai aucunement besoin de faire le test dessus

Reply

Marsh Posté le 21-05-2007 à 09:23:54    

vous en pensez quoi ?

Reply

Marsh Posté le 22-05-2007 à 10:18:03    

Disons que pour sécuriser tout ce que tu fais avec ta base de données, il te faut régulièrement tester si la variable $DBI::err contient bien quelque chose et ce, aussi bien au moment où tu te connectes à la BDD que lorsque tu fais des requètes (quel qu'en soit la nature : interroger la base, créer un enregistrement, etc).
 
Et si tu ne veux pas que ton programme fasse du die( ) à tire-larigaud, utilise warn( ) à la place (ça fait pareil que die en affichant un message sur STDERR mais sans sortir du programme) et arrange-toi pour gérer comment ensuite ton programme doit se comporter.

Reply

Marsh Posté le 23-05-2007 à 10:49:50    

ok merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed