Annotation of libwww/Library/src/HTLog.c, revision 2.15

2.1       frystyk     1: /*                                                                HTLog.c
                      2: **     LOGGING MODULE
                      3: **
2.3       frystyk     4: **     (c) COPYRIGHT MIT 1995.
2.1       frystyk     5: **     Please first read the full copyright statement in the file COPYRIGH.
2.15    ! frystyk     6: **     @(#) $Id: Date Author State $
2.1       frystyk     7: **
                      8: **     This module contains a simple logging mechanism for requests.
                      9: **     The user must open and close the log file!!!
                     10: **
                     11: ** History:
                     12: **     01 May 95       Henrik Frystyk, frystyk@w3.org
2.2       frystyk    13: ** Bugs:
                     14: **     ANSI file handling is not capable of handling simultanous writing
                     15: **     from several processes at the same time in a multi-process environment
2.1       frystyk    16: */
                     17: 
                     18: /* Library include files */
2.5       frystyk    19: #include "WWWLib.h"
2.1       frystyk    20: #include "HTLog.h"                                      /* Implemented here */
                     21: 
2.10      frystyk    22: PRIVATE FILE *HTLogFile = NULL;          /* Log of requests in common format */
2.1       frystyk    23: PRIVATE BOOL HTloglocal = YES;              /* Use local or GMT for logfile */
                     24: 
                     25: /* ------------------------------------------------------------------------- */
                     26: 
                     27: /*     Open a Logfile
                     28: **     --------------
                     29: **     You can use either GMT or local time. If no filename is given,
2.4       frystyk    30: **     no log is kept. New log entries can be either appended to an existing
                     31: **     file or overwriting an exsisting file.
2.1       frystyk    32: **     Returns YES if OK, NO on error
                     33: */
2.14      frystyk    34: PUBLIC BOOL HTLog_open (const char * filename, BOOL local, BOOL append)
2.1       frystyk    35: {
2.4       frystyk    36:     if (!filename || !*filename) {
2.13      eric       37:        if (WWWTRACE) HTTrace("Log......... No log file given\n");
2.4       frystyk    38:        return NO;
                     39:     }
2.6       frystyk    40:     if (WWWTRACE)
2.13      eric       41:        HTTrace("Log......... Open log file `%s\'\n", filename);
2.10      frystyk    42:     if (HTLogFile) {
2.6       frystyk    43:        if (WWWTRACE)
2.13      eric       44:            HTTrace("Log......... Already open\n");
2.1       frystyk    45:        return NO;
                     46:     }
2.10      frystyk    47:     HTLogFile = fopen(filename, append ? "a" : "w");
                     48:     if (!HTLogFile) {
2.6       frystyk    49:        if (WWWTRACE)
2.13      eric       50:            HTTrace("Log......... Can't open log file `%s\'\n",
2.4       frystyk    51:                    filename);
2.1       frystyk    52:        return NO;
                     53:     }
                     54:     HTloglocal = local;                                           /* remember state */
                     55:     return YES;
                     56: }
                     57: 
                     58: 
                     59: /*     Close the log file
                     60: **     ------------------
                     61: **     Returns YES if OK, NO on error
                     62: */
2.10      frystyk    63: PUBLIC BOOL HTLog_close (void)
2.1       frystyk    64: {
2.6       frystyk    65:     if (WWWTRACE)
2.13      eric       66:        HTTrace("Log......... Closing log file\n");
2.10      frystyk    67:     if (HTLogFile) {
                     68:        int status = fclose(HTLogFile);
                     69:        HTLogFile = NULL;
2.1       frystyk    70:        return (status!=EOF);
                     71:     }
                     72:     return NO;
                     73: }
                     74: 
2.10      frystyk    75: PUBLIC BOOL HTLog_isOpen (void)
                     76: {
                     77:     return HTLogFile ? YES : NO;
                     78: }
2.1       frystyk    79: 
2.10      frystyk    80: /*     Add entry to the log file
                     81: **     -------------------------
2.1       frystyk    82: **     Format: <HOST> - - <DATE> <METHOD> <URI> <RESULT> <CONTENT_LENTGH>
2.2       frystyk    83: **     which is almost equivalent to Common Logformat. Permissions on UNIX
                     84: **     are modified by umask.
2.1       frystyk    85: **
                     86: **     Returns YES if OK, NO on error
                     87: **
                     88: **     BUG: No result code is produced :-( Should be taken from HTError.c
                     89: */
2.10      frystyk    90: PUBLIC BOOL HTLog_add (HTRequest * request, int status)
2.1       frystyk    91: {
2.10      frystyk    92:     if (HTLogFile) {
2.1       frystyk    93:        time_t now = time(NULL);        
2.5       frystyk    94:        HTParentAnchor *anchor = HTRequest_anchor(request);
                     95:        char * uri = HTAnchor_address((HTAnchor *) anchor);
2.13      eric       96:        if (WWWTRACE) HTTrace("Log......... Writing log\n");
2.10      frystyk    97:        fprintf(HTLogFile, "localhost - - [%s] %s %s %d %ld\n",
2.1       frystyk    98:                HTDateTimeStr(&now, HTloglocal),
2.5       frystyk    99:                HTMethod_name(HTRequest_method(request)),
2.1       frystyk   100:                uri,
2.4       frystyk   101:                status,
2.11      frystyk   102:                HTAnchor_length(anchor));
2.12      frystyk   103:        HT_FREE(uri);
2.10      frystyk   104:        return (fflush(HTLogFile)!=EOF);       /* Actually update it on disk */
2.1       frystyk   105:     }
                    106:     return NO;
                    107: }

Webmaster