16 septembre 2020

log4j : Envoi de mail sur présence d'une erreur fatale

Le guide technique présente une astuce pour remonter un incident Java par mail via le fichier log4j (typiquement en cas d'erreur fatale de l'application). Utile si vous ne disposez pas d'outil de surveillance sur la machine.

Ci dessous un exemple avec le serveur HRD Query :

Mises à jour dans le fichier query/conf/query_log.properties

  • Au niveau des loggers :

# Ajout de la sortie "mail"
log4j.rootLogger = INFO, consoleappender, fileappender, mailappender
log4j.logger.com.hraccess = INFO, consoleappender, fileappender, mailappender

  • Ajout de la définition de l'appender :


# appender MAIL
# Définition du niveau de trace de l'appender
log4j.appender.mailappender.Threshold=FATAL
# Définition du type d'appender

log4j.appender.mailappender=org.apache.log4j.net.SMTPAppender
# Formatage des messages
log4j.appender.mailappender.layout=org.apache.log4j.PatternLayout
log4j.appender.mailappender.layout.ConversionPattern=%d [%t] %-5p %c -%m%n

# Destinataire,
Emetteur, Sujet du mail
log4j.appender.mailappender.To=admin@digix.com,john.doe@digix.com
log4j.appender.mailappender.Fr
om=nePasRepondre@digix.com
log4j.appender.mailappender.Subject=Erreur Fatale HRD Query
# Serveur de courrier de l'entreprise
log4j.appender.mailappender.SMTPHost=
smtp.digix.com

  •  Arrêt / démarrage du serveur HRDQuery

 

Pour test j'ai temporairement placé les logs en mode DEBUG et j'ai paramétré un envoi en cas de message de poids ERROR :
log4j.appender.mailappender.Threshold=ERROR

(puis arrêt / démarrage)

 

J'ai provoqué l'apparition d'une erreur de HRD Query en insérant en MD10 MD20 des données référençant  un modèle inexistant :

SQL> insert into MD10 values ('0123456789ABBHV',0,'0001-01-01',' ','0',' ','0001-01-01','F','DUMMY',0,'FR','SN00025adminSelfService@digix.comSJ00014W0W0AGE0 Step3');
SQL> insert into MD20 values ('
0123456789ABBHV','00','0000',SYSDATE);
SQL> insert into MD20 values ('
0123456789ABBHV','01','0001','dummy@digix.com');
SQL> insert into MD20 values ('
0123456789ABBHV','03','001','GPNAME         DUMMY');
SQL> commit;

 

Dans les logs du Query je vois le message d'erreur : 

2020-09-16 10:18:03,114 [Thread-16] DEBUG - Unable to find entity <DUMMY> (Mail template). Check that the entity exists and was published
2020-09-16 10:18:03,115 [Thread-16] ERROR - QRSRV9999 Exception
java.lang.Exception: QRSRV1033 Unable to find message template (code=<
DUMMY>, language=<F>, vocabulary=<FRP>)
        at com.hraccess.message.description.impl.MessageDescriptionSenderImpl.buildMessage(MessageDescriptionSenderImpl.java:175)

 

Sur mon poste, dans ma boite mail, un message de "nePasRepondre@digix.com" libellé "Erreur Fatale HRD Query" est bien arrivé :

2020-09-16 10:18:03,115  3532 ERROR [Thread-16] qrsrv.messages - QRSRV9999 Exception
java.lang.Exception: QRSRV1033 Unable to find message template (code=<
DUMMY>, language=<F>, vocabulary=<FRP>)
               
at com.hraccess.message.description.impl.MessageDescriptionSenderImpl.buildMessage(MessageDescriptionSenderImpl.java:175)


Delete du mail HR dans les tables MD**, retour du Query à INFO et configuration d'un mail en cas de message de poids FATAL dans la configuration , arrêt / démarrage de HRD Query.

3 commentaires:

  1. un VRAI message reçu hier :

    De : do.not.reply@digix.com
    Envoyé : dimanche 6 juin 2021 18:11
    À : DiGix
    Objet : v7dev HRDQuery : Exception java

    2021-06-06 18:11:20,140 [main] FATAL hrjs - HRJS9001 An exception occurred while connecting to OpenHR Server com.hraccess.openhr.exception.SessionConnectionException: Error when connecting OpenHR session
    com.hraccess.openhr.exception.SessionConnectionException: Error when connecting OpenHR session
    at com.hraccess.openhr.impl.HRSessionImpl.connect(HRSessionImpl.java:975)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ...
    Caused by: java.net.ConnectException: Connexion refusée (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    ...

    RépondreSupprimer
  2. Bonjour, merci pour ces informations.
    Dans le cadre de notre personnalisation de HRaccess en université, il est prévu que l'application envoie des mails ( module formation : envoie des convocations et des validations par les responsables). J'ai bien les mail qui se constituent , j'ai les tables MD10 et MD20 qui s'alimentent. Les mails partent et les tables se vident. par contre , je n'ai aucune trace de ces envoies dans les log du qrsrv.log ou autre . comment paramétrer le serveur de query pour qu'il logue les envoie ( date, from, to , cc ,cci ) ?

    RépondreSupprimer