diff --git a/trace.c b/trace.c index 96364900..7ae47edd 100644 --- a/trace.c +++ b/trace.c @@ -474,6 +474,48 @@ static int TraceLog(pSICSOBJ ccmd, SConnection * con, } return 1; } +/*----------------------------------------------------------------*/ +static int TraceAppend(pSICSOBJ ccmd, SConnection * con, + Hdb * cmdNode, Hdb * par[], int nPar) +{ + char *filename = NULL; + + if(nPar < 1) { + if(logFD != NULL){ + SCPrintf(con,eValue,"Tracing to %s", logfile); + } else { + SCWrite(con,"Tracing is off", eValue); + } + return 1; + } + + filename = par[0]->value.v.text; + /* + This is good even if appending to the same file: + it flushes all buffers + */ + if(logFD != NULL){ + fclose(logFD); + free(logfile); + } + logFD = fopen(filename,"a+"); + if(logFD == NULL){ + SCPrintf(con,eError,"ERROR: failed to open %s for logging", filename); + return 0; + } else { + logfile = strdup(filename); + saveInitialParameters(); + SCPrintf(con,eValue,"Logging to %s", filename); + if(hdbInit == 0){ + TraceObjects(); + hdbInit = 1; + } + TaskRegisterN(pServ->pTasker,"tracestamper", + TraceLogTask, NULL, NULL, NULL, 1); + } + return 1; +} + /*-----------------------------------------------------------------------------*/ static int TraceDebug(pSICSOBJ ccmd, SConnection * con, Hdb * cmdNode, Hdb * par[], int nPar) @@ -520,6 +562,11 @@ void MakeTrace(void) "log", usMugger, MakeSICSFunc(TraceLog)); AddSICSHdbPar(cmd, "filename", usMugger, MakeHdbText("")); + cmd = AddSICSHdbPar(ccmd->objectNode, + "append", usMugger, MakeSICSFunc(TraceAppend)); + AddSICSHdbPar(cmd, "filename", usMugger, MakeHdbText("")); + + cmd = AddSICSHdbPar(ccmd->objectNode, "filter", usMugger, MakeSICSFunc(TraceFilter)); AddSICSHdbPar(cmd, "selection", usMugger, MakeHdbInt(0));