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

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

Webmaster