IIS : Les DLL de filtre ISAPI |
Sélectionnez l'onglet Filtres ISAPI et ajouter votre propre filtre.
Le filtre qui va être réalisé est très simple. Il ne capte que les évènement LOG. Ces même évènements sont captés par le serveur et génère une trace d'extension LOG par défaut dans C:\Winnt\System32\LogFiles\W3SVC1. Voici à quoi ressemble ce fichier:
#Software: Microsoft Internet Information Server 4.0 #Version: 1.0 #Date: 2001-01-04 16:44:47 #Fields: time c-ip cs-method cs-uri-stem sc-status 16:44:47 169.227.100.54 GET /cpi 401 16:44:47 169.227.100.54 GET /cpi/ 302 16:44:47 169.227.100.54 GET /cpi/ 401 16:44:47 169.227.100.54 GET /cpi/index.html 304 16:44:47 169.227.100.54 GET /cpi/images/cp.gif 401 16:44:47 169.227.100.54 GET /cpi/images/mcsd.gif 401 16:44:47 169.227.100.54 GET /cpi/images/cp.gif 304 16:44:47 169.227.100.54 GET /cpi/bart/Bartman.gif 401 16:44:47 169.227.100.54 GET /cpi/images/mcsd.gif 304 ...Pour réaliser le même type de fichier, le filtre doit s'enregistrer et préciser les évènements qu'il souhaite recevoir. Si le filtre est réaliser en utilisant l'assisant ISAPI des MFC. Le code est totalement généré et il ne suffit que de remplir les fonctions données:
DWORD CTraceLogFilter::OnLog(CHttpFilterContext *pCtxt, PHTTP_FILTER_LOG pLog) { // TODO: React to this notification accordingly and // return the appropriate status code CString str; str = CString("Log: ") + pLog->pszTarget + "; " + pLog->pszParameters; CStdioFile f; if( f.Open("D:\\dev\\cpi\\Divers\\IIS\\Trace\\filter.txt", CFile::typeText | CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate) ) { f.SeekToEnd(); f.WriteString(str); f.WriteString("\n"); f.Close(); } return SF_STATUS_REQ_NEXT_NOTIFICATION; }Chaque évènement qui est reçu par le filtre est inscrit dans le fichier de trace:
Log: /cpi; Log: /cpi/; Log: /cpi/; Log: /cpi/index.html; Log: /cpi/images/cp.gif; Log: /cpi/images/mcsd.gif; Log: /cpi/images/cp.gif; Log: /cpi/bart/Bartman.gif; Log: /cpi/images/mcsd.gif; ...
© 2001 Christophe Pichaud. All rights reserved.