Publié le :
Administration CREATION_INTERNE

Configuration et Utilisation d'un Système de Journalisation (Logging) Avancé

Attention : Ce code nécessite des droits administrateur.
Le script présente une méthode pour configurer la journalisation SAS© via un fichier externe `log_config.xml` afin de créer des fichiers logs rotatifs (Rolling log file). Il illustre l'utilisation de macros personnalisées (préfixées par %l) pour émettre des messages de log à différents niveaux de sévérité. Ces appels sont démontrés à la fois dans du code ouvert et au sein de macros imbriquées (%a, %b, %c). Finalement, un `data _null_` step montre comment utiliser des routines `call` pour générer des messages depuis un environnement data step, s'intégrant ainsi au même système de logging.
Analyse des données

Type : CREATION_INTERNE


Le script ne lit aucune donnée. Il utilise un `data _null_` step, qui est une étape de traitement sans création de jeu de données, uniquement pour exécuter des routines de journalisation.

1 Bloc de code
Commentaire
Explication :
Ce bloc est un commentaire détaillé expliquant comment configurer la journalisation personnalisée dans SAS. Il décrit la modification nécessaire au fichier de configuration `sasv9_u8.cfg` et fournit le contenu d'un fichier `log_config.xml` pour activer des logs rotatifs basés sur la date et l'utilisateur. Ceci est une tâche d'administration système.
Copié !
1/* log setting;
2 
3 1. sasv9_u8.cfg
4 
5 add -LOGCONFIGLOC "D:\server\sas94\conf\log_congfig.xml"
6 
7 2. log_config.xml;
8 
9 <?xml version="1.0" encoding="UTF-8"?>
10 <logging:configuration xmlns:logging="http://www.sas.com/xml/logging/1.0/">
11 <!-- Rolling log file with default rollover of midnight -->
12 <appender class="RollingFileAppender" name="RFA_TIME">
13 <param name="Append" value="true"/>
14 <param name="ImmediateFlush" value="true"/>
15 <param name="Threshold" value="TRACE"/>
16 <rollingPolicy class="TimeBasedRollingPolicy">
17 <param name="fileNamePattern" value="D:\server\sas94\log\log_%S{username}_%d.log"/>
18 </rollingPolicy>
19 <layout>
20 <param name="HeaderPattern" value="Host: '%S{hostname}',
21 OS: '%S{os_family}', Release: '%S{os_release}',
22 SAS Version: '%S{sup_ver_long2}', Command: '%S{startup_cmd}'"/>
23 <param name="ConversionPattern" value="%m"/>
24 </layout>
25 </appender>
26 <!-- Administration message logger -->
27 <logger name="root">
28 <level value="TRACE"/>
29 </logger>
30 <!-- Root logger -->
31 <root>
32 <appender-ref ref="RFA_TIME"/>
33 </root>
34 </logging:configuration>
35 
36 3.replace (D:\server\sas94\log) with your own path;
37 
38 4.restart SAS;
39 
40*/
2 Bloc de code
Macro
Explication :
Appels à une série de macros personnalisées (`%lstart`, `%lfatal`, `%lerror`, etc.) pour générer des messages de log de différents niveaux de sévérité (Fatal, Error, Warn, Info, Debug, Trace). Ces macros ne sont pas standards et font partie du système de logging personnalisé démontré dans le script.
Copié !
1%lstart;
2%lfatal(this is a test fatal log send BY OPEN_CODE);
3%lerror(this is a test error log send BY OPEN_CODE);
4%lwarn(this is a test warn log send BY OPEN_CODE);
5%linfo(this is a test info log send BY OPEN_CODE);
6%ldebug(this is a test debug log send BY OPEN_CODE);
7%ltrace(this is a test trace log send BY OPEN_CODE);
8%lbreak(this is a test log break send BY OPEN_CODE);
3 Bloc de code
Macro
Explication :
Définition de trois macros imbriquées (`%a`, `%b`, `%c`). Chaque macro appelle des macros de logging pour illustrer la traçabilité des appels dans les journaux. L'exécution commence par l'appel à la macro `%a`, qui déclenche une chaîne d'appels (`%a` -> `%b` -> `%c`), démontrant comment le contexte d'exécution peut être capturé dans les logs.
Copié !
1%macro a;
2 %b;
3%mend;
4 
5%macro b;
6 %lfatal(this is a test fatal log send BY B);
7 %lerror(this is a test error log send BY B);
8 %lwarn(this is a test warn log send BY B);
9 %linfo(this is a test info log send BY B);
10 %ldebug(this is a test debug log send BY B);
11 %ltrace(this is a test trace log send BY B);
12 %lbreak(this is a test log break send BY B);
13 %c;
14%mend;
15 
16 
17%macro c;
18 %lfatal(this is a test fatal log send BY C);
19 %lerror(this is a test error log send BY C);
20 %lwarn(this is a test warn log send BY C);
21 %linfo(this is a test info log send BY C);
22 %ldebug(this is a test debug log send BY C);
23 %ltrace(this is a test trace log send BY C);
24 %lbreak(this is a test log break send BY C);
25%mend;
26%a;
4 Bloc de code
DATA STEP
Explication :
Utilisation d'un `data _null_` pour exécuter des routines `call` spécifiques (`call lerror`, `call lwarn`, `call linfo`). Ces routines, qui sont probablement des fonctions personnalisées (via PROC FCMP), permettent d'écrire dans le log SAS configuré à partir d'une étape DATA, offrant une méthode de logging alternative aux macros.
Copié !
1options nonotes;
2DATA _null_;
3 call lerror('data step msg eror!');
4 call lwarn('data step msg warn!');
5 call linfo('data step msg info!');
6RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« Configurer la journalisation via le fichier de configuration sasv9.cfg (option -LOGCONFIGLOC) est la méthode la plus robuste pour sécuriser vos environnements. Cela garantit que chaque session SAS, quel que soit son mode de lancement, hérite d'une structure de log normalisée.

L'en-tête dynamique (HeaderPattern) incluant l'hôte, l'OS et la version est un atout précieux pour le support technique. Ce système transforme le log SAS — souvent perçu comme un simple fichier texte — en une véritable base de connaissances structurée, prête à être indexée par des outils d'analyse de logs modernes ou des solutions de supervision »