⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htlog.c

📁 www工具包
💻 C
字号:
/*								   HTLog.c**	LOGGING MODULE****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTLog.c,v 2.24 1999/02/22 22:10:11 frystyk Exp $****	This module contains a simple logging mechanism for requests.**	The user must open and close the log file!!!**** History:**  	01 May 95	Henrik Frystyk, frystyk@w3.org** Bugs:**	ANSI file handling is not capable of handling simultanous writing**	from several processes at the same time in a multi-process environment*//* Library include files */#include "WWWLib.h"#include "HTLog.h"					 /* Implemented here */struct _HTLog {    FILE *		fp;    BOOL		localtime;    int			accesses;};/* ------------------------------------------------------------------------- *//*	Open a Logfile**	--------------**	You can use either GMT or local time. If no filename is given,**	no log is kept. New log entries can be either appended to an existing**	file or overwriting an exsisting file.**	Returns YES if OK, NO on error*/PUBLIC HTLog * HTLog_open (const char * filename, BOOL local, BOOL append){    HTLog * log;    if (!filename || !*filename) {	HTTRACE(APP_TRACE, "Log......... No log file given\n");	return NULL;    }    if ((log = (HTLog *) HT_CALLOC(1, sizeof(HTLog))) == NULL)        HT_OUTOFMEM("HTLog_open");    HTTRACE(APP_TRACE, "Log......... Open log file `%s\'\n" _ filename);    log->fp = fopen(filename, append ? "a" : "w");    if (!log->fp) {	HTTRACE(APP_TRACE, "Log......... Can't open log file `%s\'\n" _ filename);	HT_FREE(log);	return NULL;    }    log->localtime = local;    return log;}/*	Close the log file**	------------------**	Returns YES if OK, NO on error*/PUBLIC BOOL HTLog_close (HTLog * log){    if (log && log->fp) {	int status;	HTTRACE(APP_TRACE, "Log......... Closing log file %p\n" _ log->fp);	status = fclose(log->fp);	HT_FREE(log);	return (status != EOF);    }    return NO;}PUBLIC int HTLog_accessCount (HTLog * log){    return log ? log->accesses : -1;}/*	Add entry to the log file**	-------------------------**	Format: <HOST> - - <DATE> <METHOD> <URI> <RESULT> <CONTENT_LENTGH>**	which is almost equivalent to Common Logformat. Permissions on UNIX**	are modified by umask.****	Returns YES if OK, NO on error****	BUG: No result code is produced :-( Should be taken from HTError.c*/PUBLIC BOOL HTLog_addCLF (HTLog * log, HTRequest * request, int status){    if (log && log->fp) {	time_t now = time(NULL);		HTParentAnchor * anchor = HTRequest_anchor(request);	char * uri = HTAnchor_address((HTAnchor *) anchor);	HTTRACE(APP_TRACE, "Log......... Writing CLF log\n");	fprintf(log->fp, "localhost - - [%s] %s %s %d %ld\n",		HTDateTimeStr(&now, log->localtime),		HTMethod_name(HTRequest_method(request)),		uri ? uri : "<null>",			/* Bill Rizzi */		abs(status),		HTAnchor_length(anchor));	HT_FREE(uri);	log->accesses++;	return (fflush(log->fp) != EOF); /* Actually update it on disk */    }    return NO;}/*	Add entry to the referer log file**	---------------------------------**	**	which is almost equivalent to Common Logformat. Permissions on UNIX**	are modified by umask.****	Returns YES if OK, NO on error*/PUBLIC BOOL HTLog_addReferer (HTLog * log, HTRequest * request, int status){    if (log && log->fp && request) {	HTParentAnchor * parent_anchor = HTRequest_parent(request);	if (parent_anchor) {	    char * me = HTAnchor_address((HTAnchor *) HTRequest_anchor(request));	    char * parent = HTAnchor_address((HTAnchor *) parent_anchor);	    HTTRACE(APP_TRACE, "Log......... Writing Referer log\n");	    if (me && parent && *parent) {		fprintf(log->fp, "%s -> %s\n", parent, me);	    }	    HT_FREE(me);	    HT_FREE(parent);	    log->accesses++;	    return (fflush(log->fp) != EOF); /* Actually update it on disk */	}    }    return NO;}/***	A generic logger - logs whatever you put in as the line.*/PUBLIC BOOL HTLog_addLine (HTLog * log, const char * line){    if (log && log->fp && line) {	fprintf(log->fp, "%s\n", line);	log->accesses++;	return (fflush(log->fp) != EOF); /* Actually update it on disk */    }    return NO;}/***	A generic logger with variable arguments*/PUBLIC BOOL HTLog_addText (HTLog * log, const char * fmt, ...){    if (log && log->fp) {	va_list pArgs;	va_start(pArgs, fmt);#ifdef HAVE_VPRINTF	log->accesses++;	(vfprintf(log->fp, fmt, pArgs));	va_end(pArgs);#endif	return (fflush(log->fp) != EOF); /* Actually update it on disk */    }    return NO;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -