Benutzerdefinierte Programm-Meldungen mit Log4SAS im SAS-Log und darüber hinaus



Ähnliche Dokumente
Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Intranet Moodle

FritzCall.CoCPit Schnelleinrichtung

Installation der SAS Foundation Software auf Windows

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Datensicherung. Beschreibung der Datensicherung

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Internet online Update (Internet Explorer)

Programm GArtenlisten. Computerhinweise

Was man mit dem Computer alles machen kann

Das Leitbild vom Verein WIR

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Dokumentation IBIS Monitor

OP-LOG

ELO Print&Archive so nutzen Sie es richtig

Internet online Update (Mozilla Firefox)

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

! " # $ " % & Nicki Wruck worldwidewruck

Eine Anwendung mit InstantRails 1.7

ICS-Addin. Benutzerhandbuch. Version: 1.0

Übungen Programmieren 1 Felix Rohrer. Übungen

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Anwendungsbeispiele. Neuerungen in den s. Webling ist ein Produkt der Firma:

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock

SANDBOXIE konfigurieren

Urlaubsregel in David

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

Artikel Schnittstelle über CSV

Was meinen die Leute eigentlich mit: Grexit?

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Tevalo Handbuch v 1.1 vom

Möglichkeiten des Parallelbetriebs der VR-NetWorld Software Parallelbetrieb VR-NetWorld Software 4.4x und Version 5.0 ab der 2. Beta!

Anleitung für Autoren auf sv-bofsheim.de

XPubInDesign CS2-PlugIn

MSI TECHNOLOGY. RaidXpert AMD. Anleitung zur Installation und Konfiguration MSI

Anleitung zur Verwendung der VVW-Word-Vorlagen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Nutzung von Log4J und Commons Logging

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade

Inhaltsverzeichnis. 1. Empfängerübersicht / Empfänger hinzufügen 2. Erstellen eines neuen Newsletters / Mailings 3. Versand eines Newsletters

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Bilder zum Upload verkleinern

ARCO Software - Anleitung zur Umstellung der MWSt

1 Mathematische Grundlagen

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Meet the Germans. Lerntipp zur Schulung der Fertigkeit des Sprechens. Lerntipp und Redemittel zur Präsentation oder einen Vortrag halten

Virtuemart-Template installieren? So geht es! (Virtuemart 2.0.x)

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Anleitung zum Login. über die Mediteam- Homepage und zur Pflege von Praxisnachrichten

Professionelle Seminare im Bereich MS-Office

Arbeiten mit MozBackup

Reporting Services und SharePoint 2010 Teil 1

Wie räume ich mein Profil unter Windows 7 auf?

PHPNuke Quick & Dirty

Anleitung zum Download und zur Bedienung des Tarifbrowsers für Mac OSX und Safari / Mozilla Firefox

BSV Software Support Mobile Portal (SMP) Stand

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Lieber SPAMRobin -Kunde!

PowerMover. Eine Zusatz-Anwendung für Outlook-PowerUser. Damit können eingehende s schneller verwaltet werden. Vasquez Systemlösungen

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

SharePoint Demonstration

OutLook 2003 Konfiguration

Wie richten Sie Ihr Web Paket bei Netpage24 ein

FTP-Server einrichten mit automatischem Datenupload für

Übung: Verwendung von Java-Threads

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Schritt 1 - Registrierung und Anmeldung

Abwesenheitsnotiz im Exchangeserver 2010

Herzlich Willkommen bei der nfon GmbH

Summenbildung in Bauteiltabellen mit If Then Abfrage

Word 2010 Schnellbausteine

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

TELIS FINANZ Login App

Anleitung zum Download und zur Bedienung des Tarifbrowsers für Microsoft Windows 7 und Mozilla Firefox

Professionelle Seminare im Bereich MS-Office

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Abwesenheitsnotiz im Exchange Server 2010

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Live Update (Auto Update)

Registrierung am Elterninformationssysytem: ClaXss Infoline

Step by Step Webserver unter Windows Server von Christian Bartl

.procmailrc HOWTO. zur Mailfilterung und Verteilung. Stand:

Anleitung über den Umgang mit Schildern

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Kurzanleitung RACE APP

Installationsanleitungen

Local Control Network Technische Dokumentation

Klicken Sie auf Extras / Serienbriefe mit Word. Im Fenster Serienbriefe können Sie nun auswählen, an wen Sie den Serienbrief schicken möchten.

Grafstat Checkliste Internetbefragung

Transkript:

Benutzerdefinierte Programm-Meldungen mit Log4SAS im SAS-Log und darüber hinaus Benutzerdefinierte Programm-Meldungen mit Log4SAS im SAS-Log und darüber hinaus Alexander Zakharenko HMS Analytical Software GmbH Rohrbacher Straße 26 69115 Heidelberg Alexander.Zakharenko@analytical-software.de Zusammenfassung Kaum ein SAS-Programm kommt ohne Meldungen an den Benutzer aus. Hierzu gibt es schon viele gute und etablierte Lösungen. Warum also etwas ändern? Never touch a running system. Durch die vorgestellte SAS Technologie Log4SAS kann man verschiedene Ziele mit den SAS-Meldungen erreichen, nicht nur das SAS-Log. Auch externe Fehlerlogs können angesteuert werden. Ebenso das Windows Event Log und andere Monitoring Tools wie Xymon (früher: Hobbit) oder Tivoli. Müssen dazu die Programme angepasst werden? Ja. Aber nur einmal! Danach ist es nur eine Frage der Konfiguration in welchem Umfang und wohin die Meldungen aus den SAS-Programmen verteilt werden. Schlüsselwörter: Log4SAS, Windows Event Log 1 Überblick Wenn dem Benutzer etwas mitzuteilen ist, muss mein Programm eine Meldung herausgeben. Das ist jedem Entwickler klar. Doch mit wachsender Komplexität der Projekte und Verteilung der Rollen innerhalb der Teams, werden die Meldungen dem Einen zu viel und einem Anderen zu wenig. Ein Administrator will nur dann etwas wissen, wenn kritische Fehler passieren, die in seinen Zuständigkeitsbereich fallen, bei der Fehlersuche will der Entwickler möglichst viele Informationen haben, der Fachanwender interessiert sich nur für Meldungen, die ablaufrelevant sind. Die erfreuliche Nachricht ist: wir können nun Allem gerecht werden und das simultan. Dank der seit SAS 9.2. verfügbaren SAS Logging Facility (weiter SLF ) können die Meldungen unterschiedliche Ziele ansteuern und dabei je nach Kategorie und Inhalt gefiltert werden. SLF ist in der Lage die Meldungen nach SAS Log, Textdateien, Datenbanktabellen (SAS Datasets und Drittanbieter), Systemlogs (Windows, Unix, z/os), Message Queues und selbstdefinierte Java-Klassen zu schreiben. Kontexte von denen aus Sie SLF verwenden können, sind DATA Step, Makro und SCL. 1

Alexander Zakharenko SAS Logging Facility ist eine Anlage, die eine mächtige Infrastruktur bereitstellt. Alles was mit Logging zu tun hat kann über SLF mit wenig Aufwand und hoher Effizienz abgebildet werden. Wir können den Prozess der Message-Ausgabe in einem dreistufigen Ablauf darstellen: SAS gibt die Meldungen an die Logger. Logger nehmen die Meldungen entgegen, filtern sie nach Dringlichkeitsstufe und geben nur die relevante Meldungen weiter an die Appender In einem Appender wird an die Message ein Layout angewendet, und diese wird je nach definierte Destination(s) herausgeschrieben. Außerdem gibt es an der Stelle die Möglichkeit die Meldungen nach dem Textinhalt zu filtern. Ab SAS 9.2 wird SLF mitgeliefert. Das heißt, wenn Sie mit der besagten oder höheren Version arbeiten, ist die ganze Infrastruktur bereits vorhanden. Alles was Sie brauchen ist diese zu konfigurieren und schon können Ihre Programme die SLF verwenden. Konfiguriert wird entweder direkt in Programmen oder mittels einer XML-Datei. Wir empfehlen die XML-Version, da die ganze Konfiguration an einer Stelle untergebracht wird, man muss sie nicht zusammensuchen und kann die Konfigurationsdatei je nach Projekt beim SAS-Aufruf austauschen. Intern verwendet SAS die SLF ebenso. Insbesondere bei dem Plattformbetrieb gibt es viele vordefinierte Logger und Appender, die Sie auch mitbenutzen oder ganz ändern können. Wenn die Einstiegshürde überwunden ist, lässt sich SLF sehr bequem und effizient benutzen. Nun lassen Sie uns die Einstiegshürde beseitigen. 2

Benutzerdefinierte Programm-Meldungen mit Log4SAS im SAS-Log und darüber hinaus 2 Bausteine und Zusammenspiel 2.1 Die Hauptelemente Logger Ein Logger ist ein benannter Ausgabekanal, der Nachrichten aus SAS entgegennimmt. Durch die Verwendung verschiedener Loggernamen lassen sich die Nachrichten kategorisieren. Zusätzlich lassen sich auch Hierarchien erstellen. Der sogenannte root- Logger ist in der Hierarchie an oberster Stelle und alle anderen Logger erben seine Einstellungen. Appender Appender sind für das Schreiben der Nachrichten zuständig. Nachrichten können in Textdateien, auf die Konsole, in Betriebssystemlogs, Datenbanken, Message Queues und eigene Java Klassen geschrieben werden. Layout Durch die Verwendung von Layouts ist es möglich die Nachricht zu formatieren und mit weiteren Informationen zu ergänzen. So können zusätzlich u.a. statischer Text, Zeitstempel und Systeminformationen ausgegeben werden. Filter Filter ermöglichen eine zusätzliche Filterung bei der Nachrichtenbehandlung vorzunehmen. So können Nachrichten aufgrund des Log-Levels oder enthaltenem Text gefiltert werden. 3

Alexander Zakharenko 2.2 Zusammenspiel der Elemente SLF kann beliebig viel Logger ansteuern. Jeder Logger kann wiederum beliebig viele Appender befüllen. Jeder Appender kann (kein Muss!) die eingehenden Meldungen durch mehrere Filter durchgehen (oder eben durchfallen) lassen. Außerdem muss jeder Appender ein Layout haben, damit klar ist wie die Meldung auszusehen hat (bzw. welche Informationen auszugeben sind). Schauen wir uns das anhand einer Beispiel-Hierarchie an. In diesem Beispiel befüllt SLF vier Logger. Root- und AuditTrailLogger geben die Meldungen an jeweils einen Appender und beide filtern sie. Der AdminLogger befüllt einen Logger ungefiltert und schreibt nur eine Untermenge der Meldungen ins Windows Event Log. Schließlich gibt es einen DeveloperLogger, der drei Appender ungefiltert befüllt. Ist es Ihnen aufgefallen, dass es unterschiedliche Appender-Classen gibt? Folgende Classen sind in SLF verfügbar: FileAppender schreibt Meldungen in eine Textdatei. Dieser kann sowohl eine Datei pro Session erstellen als auch ans Ende der referenzierten Datei einfügen. RollingFileAppender funktioniert wie FileAppender, ist aber in der Lage je nach Konfiguration eine neue Datei basierend auf Datum oder Indexes zu erstellen, z.b. eine Datei je Stunde, Tag, Woche, Monat etc. 4

Benutzerdefinierte Programm-Meldungen mit Log4SAS im SAS-Log und darüber hinaus FilteringAppender wie FileAppender, zusätzlich gibt es die Möglichkeit die Meldungen nach Stufe und Inhalt zu filtern. ConsoleAppender schreibt Meldungen in die Windows- oder Unix-Konsole. DBAppender die Meldungen landen in einem SAS-Dataset oder eine Tabelle von externen Datenbank, die Tabelle / Data Set muss zum Startpunkt bereits existieren. Leider ist diese Art der Appender nur im Serverkontext vorhanden, doch es gibt eine Methode mit der man die CSV-Dateien als Vorstufe der Tabellenform herausschreiben kann. JavaAppender übergibt die Meldungen an eine benutzerdefinierte Java-Class. JMSAppender schickt die Meldungen an Java Message Service (JMS). Betriebssystemabhängige Logger: WindowsEventAppender UNXFacilityAppender ZOSFacilityAppender ZOSWtoAppender Appender im Server/Plattformbetrieb: IOMServerAppender ARMAppender 3 Konfiguration 3.1 SAS-Aufruf Die Konfiguration der Loggingsystems kann entweder zur Laufzeit innerhalb von SAS vorgenommen werden oder mittels einer externen XML-Datei. Der Pfad der XML- Konfiguration wird entweder innerhalb der SASV9.CFG-Datei angegeben: -LOGCONFIGLOC="C:\Data\Konfig\SAS\log4sas.xml" oder unter Windows in der Programmverknüpfung bzw. CMD/BAT/Shell-Datei ergänzt: "C:\Program Files\SASHome\x86\SASFoundation\9.3\sas.exe" -CONFIG "C:\Program Files\SASHome\x86\SASFoundation\9.3\nls\en\sasv9.cfg" -LOGCONFIGLOC="C:\Data\Konfig\SAS\log4sas.xml" Es empfiehlt sich die Konfiguration mit einer externen XML-Datei vorzunehmen, da unter anderem bei der Konfiguration innerhalb von SAS nur der FileAppender unterstützt wird. Außerdem ist die externe Datei wesentlich besser in Punkto Übersichtlichkeit man 5

Alexander Zakharenko muss die Informationen über mehrere Code-Module nicht zusammensuchen, denn alles was Loggen betrifft ist in der Datei aufgehoben. 3.2 Konfiguration mit einer XML Datei 3.2.1 Einstiegsbeispiel Beginnen wir mit einem kleinen übersichtlichen Beispiel: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE logging [ <!ENTITY logpath "C:\Demo\logs"> ]> <logging:configuration xmlns:logging="http://www.sas.com/xml/logging/1.0/"> <appender name="rootfile" class="fileappender"> <param name="file" value="&logpath;\rootfile root.log"/> <param name="append" value="true"/> <param name="immediateflush" value="true"/> <layout> <param name="conversionpattern" value="%d{iso8601} %r [%t] %-5p %c %u - %m"/> </layout> </appender> <root> <appender-ref ref="rootfile" /> <level value="error" /> </root> </logging:configuration> Hier wird ein Root-Logger definiert, der einen Appender befüllt. Unter Entity wird die Variable gesetzt, die den Pfad zur Logdatei festlegt (C:\Demo\logs). Wir erstellen einen FileAppender namens rootfile und legen fest wo die Zieldatei, also unser Text-Log sich befindet. Der Parameter Append besagt ob die Datei überschrieben (false) oder angefügt (true) wird. Der Parameter ImmediateFlush besagt ob die Meldungen gepuffert (false) oder sofort in die Datei geschrieben (true) werden sollen. Wir empfehlen diesen Parameter immer auf true zu setzen, da im Fall der Pufferung die Gefahr besteht, dass die letzten Meldungen am Programmschluss nicht in den Log geschrieben werden. Im Abschnitt Layout legen wir fest wie die Meldung auszusehen hat. In unserem Beispiel: %d{iso8601} Datum yyyy-mm-dd HH:mm:ss,SSS %r Millisekunden seit Programmstart [%t] Thread-ID in der der Aufruf stattfand 6

Benutzerdefinierte Programm-Meldungen mit Log4SAS im SAS-Log und darüber hinaus %-5p Log-Level der Nachricht (mind. 5 Zeichen lang) %c Name des Loggers %u Benutzer %m Eigentliche Nachricht Anschließend wird ein Logger definiert. Wir haben einen Root-Logger (dieser muss in der Konfigurationsdatei immer vorhanden sein, auch wenn er leer ist, sonst lässt sich SAS nicht starten). Wir teilen dem Logger mit, welchen Appender er zu beliefern hat und ab welchem Level die Meldungen durchgereicht werden sollen. Welche Levels gibt es? TRACE DEBUG INFO WARN ERROR FATAL Die Dringlichkeit steigt von oben nach unten. Beim Setzen einer Stufe in Logger- Konfiguration legen wir diese Stufe für alle Meldungen in dieser und in allen höheren Stufen fest. Das bedeutet, wenn wir TRACE wählen, bekommen wir absolut alle Meldungen; wenn wir uns wie im Beispiel oben für ERROR entscheiden, bekommen wir nur ERROR und FATAL. 3.2.2 Verteilung der Meldungen: Jedem nach Bedarf Nun schauen wir uns ein Beispiel an in dem die Vorteile der Technologie zum Vorschein kommen. Wir legen drei Appender (also Ausgabekanäle) an. RootFile vom vorherigen Beispiel lassen wir unverändert und erstellen parallel dazu zwei Weitere. Ein dailyfile und ein Appender für Betriebssystem-Log: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE logging> <logging:configuration xmlns:logging="http://www.sas.com/xml/logging/1.0/"> <appender name="rootfile" class="fileappender"> <param name="file" value="c:\demo\rootfile root.log"/> <param name="append" value="true"/> <param name="immediateflush" value="true"/> <layout> <param name="conversionpattern" value="%d{iso8601} %r [%t] %-5p %c %u - %m"/> </layout> </appender> 7

Alexander Zakharenko <!-- Schreibt für jeden Tag eine neue Logdatei --> <appender name="dailyfile" class="rollingfileappender"> <param name="append" value="true"/> <param name="immediateflush" value="true"/> <rollingpolicy class="timebasedrollingpolicy"> <param name="filenamepattern" value="&logpath;\%d.log"/> </rollingpolicy> <layout> <param name="conversionpattern" value="%d{iso8601} %r [%t] %-5p %c %u - %m"/> </layout> </appender> <!-- Betriebsystem-Log --> <appender name="syslog" class="windowseventappender"> <layout> <param name="conversionpattern" value="%d: %m"/> </layout> </appender> <!-- Root-Logger. Siehe log4sas-1.xml --> <root> <appender-ref ref="rootfile" /> <level value="trace" /> </root> <!-- Neuer Logger für unseren DalyFile-Appender. --> <logger name="myownlogger"> <level value="warn" /> <appender-ref ref="dailyfile" /> </logger> <logger name="syslogger"> <level value="fatal" /> <appender-ref ref="syslog" /> </logger> </logging:configuration> Was ist neu an diesem Beispiel? Wir erhalten zwei neue Appender-Klassen: RollingFileAppender und WindowsEventAppender. RollingFileAppender erstellt je nach Vorgabe (Element rollingpolicy) zeitgesteuert eine neue Datei. Aus dem Parameter FileNamePattern ergibt sich der Name der Log-Datei. Wenn im Pattern so wie im Beispiel oben ein Platzhalter für Tag auftaucht wird täglich eine neue Log-Datei erstellt. Ein Logger der Klasse WindowsEventAppender fügt die Meldungen zu Windows Ereignissen ein. An dieser Stelle muss verraten werden wie man die Meldungen produziert (genauer wird es im nächsten Kapitel behandelt): 8

Benutzerdefinierte Programm-Meldungen mit Log4SAS im SAS-Log und darüber hinaus %LOG4SAS; %LOG4SAS_FATAL(sysLogger, Houston wir haben ein Problem. So schreiben Sie die Meldungen in Windows Eventlog.); 3.2.3 Ausgabe in ein Data Set Leider steht die Möglichkeit die Meldungen in einen Data Set zu schreiben nur im Serverkontext und nur in Bestimmten Logger-Hierarchien zur Verfügung (z.b. Perf.ARM, App, Audit). Doch es gibt eine Möglichkeit die Meldungen in eine tabellarische Form zu bringen: wir können einen FileAppender als eine CSV-Datei definieren, und im Layout die CSV-Struktur definieren: <appender name="csvfile" class="fileappender"> <param name="file" value="c:\demo\logs\csvlog.csv" /> <param name="append" value="false"/> <param name="immediateflush" value="true"/> <layout> <param name="conversionpattern" value="%d{iso8601};%r;%t;%-5p;%c;%u;%m"/> </layout> </appender> Diese CSV lässt sich dann im Handumdrehen als ein Data Set einlesen. Wenn in den Programmeldungen Semikolons vorkommen sollten, kann man einen anderen Trennsymbol aussuchen, zum Beispiel (Pipe). 3.2.4 Filterung Mit dem Allem noch nicht genug man kann die Meldungen nach Bedarf auch noch filtern. Nicht nur nach dem Level, sondern auch nach einer bestimmten Zeichenkette, 9

Alexander Zakharenko außerdem kann man die doppelte Meldungen unterdrücken. Die Filterangaben werden in Appenderdefinitionen untergebracht: <appender name="syslog" class="windowseventappender"> <layout> <param name="conversionpattern" value="%d: %m"/> </layout> <filter class="stringmatchfilter"> <param name="stringtomatch" value="abbruch"/> <param name="acceptonmatch" value="true"/> </filter> <filter class="denyallfilter"> </filter> </appender> Filter werden nacheinander angewendet und damit mit logischem oder verknüpft. Damit die Meldungen, die von keinem Filter akzeptiert wurden nicht durchkommen, müssen diese am Schluss mit DenyAllFilter explizit abgewiesen werden. Die Filterung der Meldungen erfolgt über textlichen Inhalt (siehe Beispiel oben), Meldungsstufe oder bereich. Außerdem gibt es einen speziellen Filter, der die doppelten Meldungen unterdrückt. Der DenyAllFilter wurde bereits erwähnt. Es gibt auch einen AndFilter, der die andere Filter mit logischem und verknüpft. 4 Meldungen produzieren 4.1 Aufrufe in den SAS-Programmen Nun ist alles perfekt konfiguriert und Sie wollen unbedingt sehen wie die Meldungen von SAS aus in allen definierten Destinations landen. Das ist im Vergleich zur Konfiguration eine leichte Übung. Die Meldungen lassen sich aus Makros, DATA Step und SCL ausgeben. SLF ist per Default aktiv und jederzeit in Programmen einsatzbereit (MAUTOSOURCE-Option muss aktiv sein). Außerdem: Je nach Definition und Hierarchie können auch die SAS-eigenen Nachrichten in Ihrer Ausgabe landen. Das ist der Fall, wenn Sie zum Beispiel den Root-Logger modifizieren. 4.2 Aufrufe aus Macro Facility Bevor man die Meldungen aus Macro Facility ausgibt, muss SLF initialisiert werden. Das wird mit dem Aufruf von Autocall-Macro %LOG4SAS gemacht. Damit der Aufruf nicht vergessen wird, empfehlen wir diesen in der Autoexec unterzubringen. 10

Benutzerdefinierte Programm-Meldungen mit Log4SAS im SAS-Log und darüber hinaus Beispiel von Aufrufen aus der Makro-Welt: %log4sas; %log4sas_trace(myownlogger, Hallo mein ganz eigener Logger); %log4sas_error("", Jeder Aufruf an unbekannte Logger wird an den RootLogger weitergeben); %log4sas_warn (root, Natürlich können Sie den RootLogger auch direkt ansprechen); War s das? Ja! Mehr brauchen Sie nicht zu tun. Wenn myownlogger und RootLogger korrekt konfiguriert sind, sind die Meldungen nach diesen Aufrufen bereits in den definierten Destinations. 4.3 Aufruf aus DATA Step DATA _null_; rc = LOG4SAS_LOGEVENT("MyOwnLogger", "Info", "Wie gewohnt, beim Logging innerhalb eines DATA-Steps sind Anführungszeichen nötig."); %LET notiz = Macro-Variablen werden berücksichtigt.; rc = LOG4SAS_LOGEVENT("Root", "Info", "Gut zu Wissen: &notiz."); Hinweis = "DATA Step Variablen angeblich nicht"; rc = LOG4SAS_LOGEVENT("MyOwnLogger", "Error", Hinweis); rc = LOG4SAS_LOGEVENT("MyOwnLogger", "Error", "Gemeint sind aber nur die Variablen innerhalb von Quotes: Hinweis"); RUN; Nach der Ausführung landen folgende Zeilen in der Zieldatei von myownlogger: [Zeit] Info - Wie gewohnt, beim Logging innerhalb eines DATA-Steps sind Anführungszeichen nötig. [Zeit] Error - DATA Step Variablen angeblich nicht [Zeit] Error - Gemeint sind aber nur die Variablen innerhalb von Quotes: Hinweis Achten Sie darauf, dass die Variablen in den Quotes nicht aufgelöst werden (Variable Hinweis wird als Text Hinweis ausgegeben). Bauen Sie ggf. vorab die Meldung zusammen und geben Sie diese dann am Stück heraus. 4.4 Aufrufe aus SCL: DATA _null_; if _n_ = 1 then do; declare logger logobj("root"); end; logobj.error("auch SCL kann LOG4SAS bedienen. Ist das nicht toll?"); RUN; 11

Alexander Zakharenko 5 Probleme? Dann wollen wir uns ein paar der häufigsten Fehler ansehen. Die XML-Datei muss als UTF-8 gespeichert werden. Um festzustellen welche Kodierung die Datei hat, öffnen Sie diese mit Windows-Editor und wählen Sie Datei->Speichern unter. Unten rechts sehen Sie die aktuelle Kodierung: Ändern Sie diese ggf. auf UTF-8 und speichern Sie die Datei. Die XML-Datei muss well-formed sein. Ob Ihre XML well-formed ist kann Ihnen jeder beliebige Browser sagen. Wenn die Datei fehlerhaft ist, lässt sie sich nicht öffnen. Beispiel mit Firefox: 6 Fazit Auch wenn Sie bereits ein eigenes Framework geschrieben haben, ist die Umstellung auf SLF empfehlenswert. Die Technologie basiert auf der Philosophie von Open-Source- Framework log4j, das sich über die Jahre zu einem De-facto-Standard für das Loggen schlechthin entwickelt. Wie bei jedem Framework gilt hier das Prinzip Code less do more. Benutzung des SLF bringt viele Vorteile mit sich, darunter: Zukunftssicherheit flexible Ansteuerung der neuen Logpositionen Steuermöglichkeit über die Loglevels und Filter Trennung zwischen Protokollierung und Anzeige Einfachere Bewältigung der Audit Trail Vorgaben Zugriff auf Windows Event Log / Tivoli / Xymon Mehr Ergebnisse durch weniger Aufwand Nun haben Sie den Grundstock an SLF-Wissen erworben und können loslegen. Probieren Sie es aus! Literatur SAS(R) 9.3 Logging: Configuration and Programming Reference. 12