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

📄 log.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
static char rcsid[] = "$Id: log.c,v 2.2 1997/05/02 20:34:44 sxw Exp $";/* *  log.c -- Collects statistics information for the broker and logs it. * *  DEBUG: none *  AUTHOR: Harvest derived * *  Harvest Indexer http://harvest.sourceforge.net/ *  ----------------------------------------------- * *  The Harvest Indexer is a continued development of code developed by *  the Harvest Project. Development is carried out by numerous individuals *  in the Internet community, and is not officially connected with the *  original Harvest Project or its funding sources. * *  Please mail lee@arco.de if you are interested in participating *  in the development effort. * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//*  ---------------------------------------------------------------------- *  Copyright (c) 1994, 1995.  All rights reserved. * *    The Harvest software was developed by the Internet Research Task *    Force Research Group on Resource Discovery (IRTF-RD): * *          Mic Bowman of Transarc Corporation. *          Peter Danzig of the University of Southern California. *          Darren R. Hardy of the University of Colorado at Boulder. *          Udi Manber of the University of Arizona. *          Michael F. Schwartz of the University of Colorado at Boulder. *          Duane Wessels of the University of Colorado at Boulder. * *    This copyright notice applies to software in the Harvest *    ``src/'' directory only.  Users should consult the individual *    copyright notices in the ``components/'' subdirectories for *    copyright information about other software bundled with the *    Harvest source code distribution. * *  TERMS OF USE * *    The Harvest software may be used and re-distributed without *    charge, provided that the software origin and research team are *    cited in any use of the system.  Most commonly this is *    accomplished by including a link to the Harvest Home Page *    (http://harvest.cs.colorado.edu/) from the query page of any *    Broker you deploy, as well as in the query result pages.  These *    links are generated automatically by the standard Broker *    software distribution. * *    The Harvest software is provided ``as is'', without express or *    implied warranty, and with no support nor obligation to assist *    in its use, correction, modification or enhancement.  We assume *    no liability with respect to the infringement of copyrights, *    trade secrets, or any patents, and are not responsible for *    consequential damages.  Proper use of the Harvest software is *    entirely the responsibility of the user. * *  DERIVATIVE WORKS * *    Users may make derivative works from the Harvest software, subject *    to the following constraints: * *      - You must include the above copyright notice and these *        accompanying paragraphs in all forms of derivative works, *        and any documentation and other materials related to such *        distribution and use acknowledge that the software was *        developed at the above institutions. * *      - You must notify IRTF-RD regarding your distribution of *        the derivative work. * *      - You must clearly notify users that your are distributing *        a modified version and not the original Harvest software. * *      - Any derivative product is also subject to these copyright *        and use restrictions. * *    Note that the Harvest software is NOT in the public domain.  We *    retain copyright, as specified above. * *  HISTORY OF FREE SOFTWARE STATUS * *    Originally we required sites to license the software in cases *    where they were going to build commercial products/services *    around Harvest.  In June 1995 we changed this policy.  We now *    allow people to use the core Harvest software (the code found in *    the Harvest ``src/'' directory) for free.  We made this change *    in the interest of encouraging the widest possible deployment of *    the technology.  The Harvest software is really a reference *    implementation of a set of protocols and formats, some of which *    we intend to standardize.  We encourage commercial *    re-implementations of code complying to this set of standards. * */#include "broker.h"#include "log.h"/* *  USE_FAST_LOGGING - will omit fflush() calls if defined. */#ifndef USE_FAST_LOGGING#undef USE_FAST_LOGGING#endif/* Global variables */extern time_t Cur_Time;/* Local variables */static FILE *log_file = NULL;static unsigned int log_master;int Log_Terse = 0;/* Initialize logging facility */int LOG_Init(){	char *filename;	if (log_file) {		Log("Log file already initialized.\n");		return ERROR;	}	filename = UTIL_make_admin_filename("LOG");	if ((log_file = fopen(filename, "a+")) == NULL) {		log_errno(filename);		xfree(filename);		errorlog("Cannot initialize log file.\n");		return ERROR;	}	xfree(filename);	(void)chmod(filename, 0640);	/* not readable by public */	(void)UTIL_Get_Time();	fprintf(log_file, "BEGIN-SESSION\t%d::\n", Cur_Time);	(void)LOG_flush_log();	/* ensure that this is printed */	return SUCCESS;}/* Log Something */#ifdef __STRICT_ANSI__int LOG_statlog(unsigned int type, ...){	va_list args;	time_t curtime;	char *outstr = NULL;	char *statname = NULL;	char *url = NULL;	char *gn = NULL;	char *gh = NULL;	char *gv = NULL;	int gid;	fd_t FD;	if (!log_file)		return ERROR;	va_start(args, type);#elseint LOG_statlog(va_alist)va_dcl{	va_list args;	time_t curtime;	unsigned int type;	char *outstr = NULL;	char *statname = NULL;	char *url = NULL;	char *gn = NULL;	char *gh = NULL;	char *gv = NULL;	int gid;	fd_t FD;	if (!log_file)		return ERROR;	va_start(args);	type = va_arg(args, unsigned int);#endif	if (LOG_do_logging(type) == TRUE) {		statname = va_arg(args, char *);		curtime = UTIL_Get_Time();		fprintf(log_file, "%s\t%d::\t", statname, curtime);		switch (type) {		case L_UPDATE:		case L_DELETE:		case L_REFRESH:		case L_CLEAN:		case L_QUERY_R:		case L_BULK_R:			url = va_arg(args, char *);			FD = va_arg(args, fd_t);			gid = va_arg(args, int);			if (Log_Terse) {				fprintf(log_file, "%d\n", FD);			} else {				fprintf(log_file, "%d\t%d\t%s\n", FD, gid, url);			}			break;		case L_COLTNG:			vfprintf(log_file, "%s:%d\twhen:%d\n", args);			break;		case L_QUERY:		case L_BULK:		case L_ADMINC:		case L_CONNECT:		case L_ADMINC_R:		case L_QUERYERR:		case L_BULKERR:			outstr = va_arg(args, char *);			fprintf(log_file, "%s\n", outstr);			break;		case L_CLEANS:		case L_COMPRESS:			fprintf(log_file, "\n");			break;		case L_GID:			gid = va_arg(args, int);			gn = va_arg(args, char *);			gh = va_arg(args, char *);			gv = va_arg(args, char *);			fprintf(log_file, "%d\t%s\t%s\t%s\n",gid,gn,gh,gv);			break;		default:			errorlog("LOGGER: Serious internal error!\n");			break;		}#ifndef USE_FAST_LOGGING		LOG_flush_log();#endif	}	va_end(args);	return SUCCESS;}/* turn on logging for a type */int LOG_turn_on(type)unsigned int type;{	log_master = log_master | type;	return SUCCESS;}int LOG_turn_off(type)unsigned int type;{	if (LOG_do_logging(type) == TRUE)		log_master = log_master ^ type;	return SUCCESS;}/* log nothing */int LOG_reset_master(){	log_master = 00;	return SUCCESS;}/* flush log file */int LOG_flush_log(){	fflush(log_file);	return SUCCESS;}int LOG_close_log(){	(void)UTIL_Get_Time();	fprintf(log_file, "END-SESSION\t%d::\n", Cur_Time);	(void)LOG_flush_log();	if (fclose(log_file) != 0) {		log_file = NULL;		return ERROR;	}	log_file = NULL;	return SUCCESS;}unsigned int LOG_match_name(name)char *name;{	if (strcasecmp(name, L_UPDATE_S) == 0)		return L_UPDATE;	if (strcasecmp(name, L_DELETE_S) == 0)		return L_DELETE;	if (strcasecmp(name, L_REFRESH_S) == 0)		return L_REFRESH;	if (strcasecmp(name, L_QUERY_S) == 0)		return L_QUERY;	if (strcasecmp(name, L_QUERY_RS) == 0)		return L_QUERY_R;	if (strcasecmp(name, L_CLEAN_S) == 0)		return L_CLEAN;	if (strcasecmp(name, L_COLTNG_S) == 0)		return L_COLTNG;	if (strcasecmp(name, L_ADMINC_S) == 0)		return L_ADMINC;	if (strcasecmp(name, L_ADMINC_RS) == 0)		return L_ADMINC_R;	if (strcasecmp(name, L_BULK_S) == 0)		return L_BULK;	if (strcasecmp(name, L_BULK_RS) == 0)		return L_BULK_R;	if (strcasecmp(name, L_CLEANS_S) == 0)		return L_CLEANS;	if (strcasecmp(name, L_COMPRESS_S) == 0)		return L_COMPRESS;	if (strcasecmp(name, L_CONNECT_S) == 0)		return L_CONNECT;	if (strcasecmp(name, L_GID_S) == 0)		return L_GID;	return (00);}/* *  LOG_rotate - Rotates the log file.  On return, the logging begins again. */int LOG_rotate(){	char *f1 = NULL;	char *f2 = NULL;	char *timebuf = NULL;	(void)UTIL_Get_Time();	fprintf(log_file, "ROTATE\t%d::\n", Cur_Time);	if (LOG_close_log() != SUCCESS)		return ERROR;#ifdef HAVE_STRFTIME	timebuf = xmalloc(BUFSIZ);#ifdef Y2K_TIME	(void)strftime(timebuf, BUFSIZ, "LOG.%Y%m%d", localtime(&Cur_Time));#else	(void)strftime(timebuf, BUFSIZ, "LOG.%y%m%d", localtime(&Cur_Time));#endif	f2 = UTIL_make_admin_filename(timebuf);#else	f2 = UTIL_make_admin_filename("LOG.old");#endif	f1 = UTIL_make_admin_filename("LOG");	if ((access(f2, F_OK) == 0) ||	    (rename(f1, f2) < 0)) {		errorlog("LOG_rotate: Cannot rotate log: %s -> %s\n", f1, f2);	}	xfree(f1);	xfree(f2);	if (timebuf)		xfree(timebuf);	return LOG_Init();}FILE *LOG_fptr(){	return (log_file);}

⌨️ 快捷键说明

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