SAS9

Astuces pour surveiller les logs SAS en temps réel sous Windows

L'équipe WeAreCAS 11 views

Pour les développeurs SAS© habitués à l'environnement Unix, la commande tail -f est un réflexe indispensable : elle permet de voir le fichier log se remplir au fur et à mesure de l'exécution d'un programme. Cependant, lorsqu'on passe à un environnement Windows (notamment pour des exécutions en mode "batch"), cette tâche devient souvent frustrante. Windows verrouille souvent les fichiers en cours d'écriture, empêchant leur lecture, ou le système de mise en mémoire tampon (buffering) laisse le fichier vide (0 Ko) pendant de longues minutes.

Voici une compilation de solutions et d'astuces tirées d'échanges entre experts pour contourner ces limitations sous Windows.

Le problème du verrouillage : Quel éditeur choisir ?

L'un des problèmes majeurs sous Windows est le message "Accès refusé" ou l'impossibilité d'ouvrir un fichier log pendant que SAS© écrit dedans.

  • À éviter : WordPad. Bien que WordPad gère mieux les sauts de ligne sur les gros fichiers, il a tendance à mal gérer l'accès concurrentiel et peut refuser l'ouverture d'un fichier en cours d'utilisation par SAS©.

  • À privilégier : Le Bloc-notes (Notepad). Contrairement aux idées reçues, le Bloc-notes standard de Windows arrive souvent à ouvrir les fichiers logs en lecture seule pendant que SAS© tourne, là où WordPad échoue.

  • L'astuce du navigateur web : Une solution méconnue mais très efficace consiste à ouvrir votre fichier .log directement avec un navigateur (Internet Explorer, Chrome, Edge, etc.). Le navigateur ne verrouille pas le fichier et affiche le texte correctement (surtout si l'extension est .log, le formatage reste lisible).

Note :
La solution "Tableau de bord" : PROC PRINTTO et HTML
Pour aller plus loin qu'une simple lecture de texte, vous pouvez rediriger vos logs vers un format HTML. Cela permet de créer de véritables tableaux de bord de suivi (avec des statuts colorés : vert pour fini, jaune pour en cours, etc.).

L'idée est d'utiliser la procédure PROC PRINTTO pour router la log vers un fichier HTML. Voici un exemple de macro proposée par la communauté :
1%MACRO PRINTTO(_logPath=, _jobID=, _jobName=);
2 %LOCAL dt;
3 %LET dt = %sysFunC(dateTime(), DATETIME16.);
4
5 /* Initialisation du fichier HTML */
6 FILENAME L_PATH "&_logPath";
7 DATA _null_;
8 file L_PATH;
9 put "<PRE>"; /* Balise pour conserver le formatage */
10 RUN;
11 FILENAME L_PATH CLEAR;
12 
13 /* Redirection de la log */
14 PROC PRINTTO LOG = "&_logPath";
15 RUN;
16 
17 %PUT NOTE: Job &_jobID - &_jobName a demarre a &dt;
18%MEND;
En ouvrant ce fichier HTML dans un navigateur et en utilisant l'actualisation automatique, vous pouvez suivre l'avancement de vos traitements confortablement.

Le problème du fichier vide (Buffering)

Même si vous réussissez à ouvrir le fichier, il arrive souvent que sa taille reste bloquée à 0 Ko ou qu'elle ne se mette pas à jour pendant de longues périodes, même si le programme tourne.

C'est un problème de mise en mémoire tampon (buffering). SAS© (et le système d'exploitation) stocke les informations en mémoire avant de les écrire physiquement sur le disque par blocs (pages) pour optimiser les performances.

Comment forcer l'écriture sur le disque ?

Il existe une option de démarrage (invocation option) peu documentée mais très utile pour ce cas précis : -unbuflog.

  • Utilisation : Cette option doit être ajoutée dans votre ligne de commande de lancement SAS© ou votre fichier de configuration (sasv9.cfg).

  • Effet : Elle demande à SAS© de ne pas "tamponner" la log et d'écrire les lignes au fur et à mesure.

  • Limites : Bien que très utile, cette option ne garantit pas toujours une mise à jour instantanée seconde par seconde (cela dépend aussi de la charge disque et de l'OS), mais elle réduit considérablement le délai d'apparition des logs.

Vous pouvez également combiner cela avec l'option -logparm : -logparm "write=immediate rollover=session"

4. Outils tiers : Ramener Unix sur Windows

Si tail -f vous manque trop, la solution radicale consiste à installer des utilitaires qui portent les commandes Unix sous Windows. Des outils comme GnuWin32, UnxUtils ou Cygwin vous permettent d'utiliser tail sur Windows pour surveiller vos fichiers logs exactement comme sur un serveur Linux.

Pour surveiller un job SAS© long sous Windows :

  1. N'utilisez pas WordPad.

  2. Utilisez le Bloc-notes ou votre navigateur web pour visualiser le fichier sans le bloquer.

  3. Ajoutez l'option -unbuflog au démarrage de SAS© pour forcer l'écriture des logs sur le disque plus rapidement.