Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/07/2007, 11h57   #1
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
Par défaut Talend - redirection des logs

Bonjour,

j'aimerai rediriger les logs (warn et error) dans un fichier externe (format texte) dans le but d'empêcher l'enchainement des jobs si une erreur se produit et de garder une trace écrite.
Je n'ai pas réussi avec le logcatcher (en m'aidant de la documentation).
Savez-vous comment faire cette manipulation ?

Merci.
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 12h21   #2
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
Bonjour,

pour rediriger les logs dans un fichier j'utilise un tLogCatcher que je relie à un tFileOutputDelimited pour lequel je coche l'option "Append" afin qu'il n'écrase pas les messages précédents.
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 13h50   #3
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
Merci ^^
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 14h07   #4
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
Bonjour,

Comment insérer une ligne dans une table (avec un tMysqlRow) en cas d'erreur ?
j'ai essayé de relier ça au tDie mais sans succès...

Merci.
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 15h17   #5
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
Et à partir du tLogCatcher ça ne marche pas ?
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 15h25   #6
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
ça ne fonctionne pas top ; si il plante il m'ensère 5 ou 6 lignes comme quoi c'est OK

j'ai réalisé la structure suivante :
___________ifok
tLogCatcher ---> tMysqlRow1
__________|iferror
__________|---> tMysqlRow2
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 16h59   #7
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
Citation:
Envoyé par SebastienM
ça ne fonctionne pas top ; si il plante il m'ensère 5 ou 6 lignes comme quoi c'est OK

j'ai réalisé la structure suivante :
___________ifok
tLogCatcher ---> tMysqlRow1
__________|iferror
__________|---> tMysqlRow2
Bonjour,

je ne pense pas qu'il faut utiliser une telle structure car le lien ifError ne sera jamais utilisé. Il faut plutôt utiliser un lien Main puis filtrer les lignes en passant par un tMap (par contre je ne connais pas par coeur les codes d'erreurs donc je ne sais pas quel filtre employer mais ça serait surement sur le champ code ou priority).
Aussi s'il y a juste une insertion à faire pourquoi ne pas utiliser un tMysqlOutput plutôt qu'un tMysqlRow ?
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 17h07   #8
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
merci de ta réponse. J'ai tout essayé... seulement voilà, si il n'y a pas d'erreur le tLogcatcher ne renvoie aucun code ; dans le second cas, je dois lancer un tMysqlRow qui contient une requête de la sorte :
"INSERT INTO STAT_JOURNAL(ID_JOURNAL,NUM_ALIM,COD_WF,DATE_EVT,TYP_EVT,LB_MESSAGE,COD_INFO,VAL_INFO)
VALUES(NULL,"+context.getProperty("num_alim")+",'WF_CHRGT_DEBUT',NOW(),'ERREUR','Fin WF_CHRGT_DEBUT',NULL,NULL)"

Mais il ne passe même pas dans le tMap
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 08h38   #9
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
Si tu veux faire des logs du début et de la fin d'un job alors il faut utiliser un tStatCatcher. Si tu veux également avoir le début et la fin de l'éxecution d'un composant spécifique dans le job, alors il suffit de cocher tStatCatcher Statistics dans l'onglet Main de l'onglet Propriétés pour ce composant. Ainsi le tStatCatcher capturera le début et la fin de l'exécution du composant.
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 08h55   #10
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
Merci de ta réponse.
j'ai trouvé une autre solution, il ne me manque plus que de trouver un moyen de limiter le nombre de rows en sortie : sur mon lien main, j'ai 6 rows et je voudrais qu'il ne passe qu'une fois au maximum dedans.

Est-ce possible ?
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 09h09   #11
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
Tu ne veux que la première ligne ?
Si c'est cela je connais une manière de faire, pas très propre mais qui fonctionne : il faut passer par un tUniqRow pour lequel aucun champ n'est déclaré comme Key Attribute dans la propriété Unique Key.
Sinon je ne connais pas de méthode simple de le faire avec un composant proposé dans Open Studio.
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 09h10   #12
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
haha, c'est moi qui t'ai répondu sur le forum officiel (bedurand).
En fait ce doit être les mêmes personnes sur ce forum et le officiel mais sous des pseudos différents

Pour limiter le nombre de lignes je n'ai pas de solution à te proposer immédiatement. Etant donné que j'ai le même problème si je trouve quelque chose je te répondrai sur http://www.talendforge.org/forum/viewtopic.php?id=1184

Mais en fait mon job d'insertion en cas d'erreur m'insère le bon nombre de lignes mais je reçois les mails en double
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 09h14   #13
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
ça ne fonctionne pas avec le tUniqRow, j'ai bien laissé décoché toutes les key attributes et j'ai quand même 6 lignes en sortie

>Hebus_Beer
le monde est petit ^^
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 09h38   #14
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
Il faut compter le nombre de lignes "manuellement".
Pour cela, il faut déclarer une variable de contexte compteur de type int avec comme valeur par défaut 0.
Ensuite il faut incrémenter cette variable à chaque message à l'aide d'un tJavaRow. Voici la structure que je propose :
log.png

Dans le tJavaRow, il y aurait :
Code :
context.setProperty("compteur",new Integer(Integer.parseInt(((String)context.getProperty("compteur")))+1).toString());
Puis dans le tMap, il y aurait le filtre suivant :
Code :
Integer.parseInt(((String)context.getProperty("compteur"))) < 2

bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 09h57   #15
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
Il ne passe pas dans les liens :



L'erreur que je génère se situe dans le tSystem2 avec un "cd (...)" au lieu de "cmd (...)"
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h08   #16
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
En effet...je viens de tester (j'avais testé rapidement avec des tWarn) et j'ai le même problème . En fait dès qu'une exception Java est levée elle semble agir comme un tDie : le tLogCatcher la traite puis le job se termine.
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 11h35   #17
Membre du Club
 
Avatar de SebastienM
 
Inscription : juin 2007
Messages : 309
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 309
Points : 52
Points : 52
Bon j'ai trouvé une solution ^^

un petit mix de tout ce qui a été dit précédemment :
- Initialiser une variable de contexte en début de Job -> context.setProperty("cpt_err","0");
- Dans le tLogcatcher créé un lien main vers un tjavaRow et mettre le code suivant : context.setProperty("cpt_err",""+(Integer.parseInt(context.getProperty("cpt_err"))+1));
- Créer un lien "if" sur le tMysqlRow à partir du tLogcatcher avec le code suivant : Integer.parseInt(context.getProperty("cpt_err"))<2

Et miracle ^^
Bon, il y a moyen de faire plus propre mais bon

Merci de votre aide.
SebastienM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 11h46   #18
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
Citation:
Envoyé par SebastienM
Bon j'ai trouvé une solution ^^

un petit mix de tout ce qui a été dit précédemment :
- Initialiser une variable de contexte en début de Job -> context.setProperty("cpt_err","0");
- Dans le tLogcatcher créé un lien main vers un tjavaRow et mettre le code suivant : context.setProperty("cpt_err",""+(Integer.parseInt(context.getProperty("cpt_err"))+1));
- Créer un lien "if" sur le tMysqlRow à partir du tLogcatcher avec le code suivant : Integer.parseInt(context.getProperty("cpt_err"))<2

Et miracle ^^
Merci pour l'info .

Citation:
Envoyé par SebastienM
Bon, il y a moyen de faire plus propre mais bon
On va s'en contenter pour l'instant. Et puis si je suis motivé un peu plus tard je me pencherai dessus plus sérieusement voire je ferai un petit composant qui va bien (mais bon il faut être motivé...).
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h49.


 
 
 
 
Partenaires

Hébergement Web