/* log.c */ /* $Id: log.c,v 1.7 1993/12/19 17:59:51 nils Exp $ */ #include <stdio.h> #include "db.h" #include "config.h" #include "nalloc.h" #include "externs.h" #include "log.h" struct log important_log = { NULL, -1, "logs/important", "*log_imp" }, sensitive_log = { NULL, -1, "logs/sensitive", "*log_sens" }, error_log = { NULL, -1, "logs/error", "*log_err" }, ioerr_log = { NULL, -1, "logs/ioerr", "*log_ioerr" }, io_log = { NULL, -1, "logs/io", "*log_io" }, gripe_log = { NULL, -1, "logs/gripe", "log_gripe" }, typed_log = { NULL, -1, "logs/typed", NULL } #ifdef LOG_FAILED_COMMANDS , huh_log = { NULL, -1, "logs/huh", NULL } #endif ; void com_errlog(str) char *str; { static char buf[2048]; sprintf(buf,"[%s] * %s",DBINFO_CHAN, str); com_send(DBINFO_CHAN, buf); } void muse_log(l,str) struct log *l; char *str; { struct timeval t; struct tm *bdown; if (l->com_channel) { static char buf[2048]; sprintf(buf,"[%s] * %s",l->com_channel, str); com_send(l->com_channel, buf); } if (!l->fptr) { l->fptr = fopen(l->filename, "a"); if (!l->fptr) { mkdir("logs",0755); l->fptr = fopen(l->filename, "a"); if (!l->fptr) { fprintf(stderr,"BLEEEP! couldn't open log file %s\n",l->filename); return; } } } gettimeofday(&t,NULL); bdown = localtime((time_t *)&t.tv_sec); fprintf(l->fptr, "%02d/%02d:%02d:%02d:%02d| %s\n", bdown->tm_mon+1,bdown->tm_mday,bdown->tm_hour,bdown->tm_min,bdown->tm_sec,str); fflush(l->fptr); if (l->counter--<0) { l->counter = 100; fclose(l->fptr); l->fptr = NULL; }; } #ifdef LOG_FAILED_COMMANDS void do_mailhuh(player) dbref player; { char buf[4096]; /* just in case. this isn't run very often, * so we can have a huge buf. */ FILE *l_huh; struct huh_struct { struct huh_list *huhs; dbref player; struct huh_struct *next; }; struct huh_list { char *dat; struct huh_list *next; }; struct huh_struct *huhs=NULL; extern NALLOC *glurp; if (huh_log.fptr) { fclose(huh_log.fptr); huh_log.fptr = NULL; } l_huh=fopen("logs/huh","r"); if(!l_huh) { notify(player,"Can't open huh log for reading."); log_error("Can't open huh log for reading."); perror("mailing huhs"); return; } while(fgets(buf,4095,l_huh)) { dbref player; struct huh_struct *x; struct huh_list *y; player=atoi(strchr(buf,'|')+1); /* grab the playnum. */ for(x=huhs;x && x->player!=player;x=x->next); if(!x) { x=(struct huh_struct *)na_alloc(glurp,sizeof(struct huh_struct)); x->next=huhs; x->huhs=NULL; x->player=player; huhs=x; } y=x->huhs; x->huhs=(struct huh_list *)na_alloc(glurp,sizeof(struct huh_list)); buf[strlen(buf)-1]='\0'; x->huhs->next=y; x->huhs->dat=na_alloc(glurp,strlen(buf)+1); strcpy(x->huhs->dat,buf); } log_io("Done loading HUHs. mailing."); fclose(l_huh); for(;huhs;huhs=huhs->next) /* discard the huhs.. they're freed at * the beginning of each process_command, * as they're glurp. */ if (huhs->player>=0 && huhs->player<db_top) if (*atr_get(huhs->player,A_HUHTO)) { struct huh_list *x; notify(player,tprintf("Doing %d",huhs->player)); l_huh = popen(tprintf("cat | /usr/local/bin/elm -s 'HUH logs' %s\n",atr_get(huhs->player,A_HUHTO)),"w"); fprintf(l_huh,"\n\nHuh logs from %s on %s.\n\n",unparse_object(huhs->player, huhs->player),MUSE_NAME); for (x=huhs->huhs; x; x=x->next) fprintf(l_huh,"%s",x->dat); fprintf(l_huh,"\n\n"); pclose(l_huh); /* fprintf(l_huh,"\nmail %s\n\n",atr_get(huhs->player,A_HUHTO)); fprintf(l_huh,"These are all the Huh?s from your rooms on MicroMUSE.\n"); fputc('\n',l_huh); for(x=huhs->huhs;x;x=x->next) fprintf(l_huh,"%s\n",x->dat); fprintf(l_huh,"\n\n.\n"); */ } fclose(huh_log.fptr); huh_log.fptr = NULL; unlink("logs/huh.log"); /* so we don't mail them the same huhs * again. */ } #endif