Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4019 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  log4perl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

log4perl

n°1558588
donny3
Posté le 11-05-2007 à 08:51:13  profilanswer
 

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.

mood
Publicité
Posté le 11-05-2007 à 08:51:13  profilanswer
 

n°1558649
anapajari
s/travail/glanding on hfr/gs;
Posté le 11-05-2007 à 09:58:34  profilanswer
 

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

n°1558668
donny3
Posté le 11-05-2007 à 10:21:33  profilanswer
 

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

n°1558768
anapajari
s/travail/glanding on hfr/gs;
Posté le 11-05-2007 à 11:35:51  profilanswer
 

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
n°1558836
donny3
Posté le 11-05-2007 à 12:36:28  profilanswer
 

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
n°1558841
donny3
Posté le 11-05-2007 à 12:57:27  profilanswer
 

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

n°1558850
donny3
Posté le 11-05-2007 à 13:08:55  profilanswer
 

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

n°1562768
donny3
Posté le 21-05-2007 à 09:23:54  profilanswer
 

vous en pensez quoi ?

n°1563308
Aricoh
gentil mais fo po pousser
Posté le 22-05-2007 à 10:18:03  profilanswer
 

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.

n°1563824
donny3
Posté le 23-05-2007 à 10:49:50  profilanswer
 

ok merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  log4perl

 

Sujets relatifs
Plus de sujets relatifs à : log4perl


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)