new function streamSetLogfile to set debug log file in script or at run-time

This commit is contained in:
2018-06-14 14:03:13 +02:00
parent 4d3960c599
commit 827e6eace9
7 changed files with 50 additions and 12 deletions

View File

@ -18,6 +18,7 @@
* *
***************************************************************/
#include <errno.h>
#include "StreamCore.h"
#include "StreamError.h"
@ -237,6 +238,24 @@ long streamReload(const char* recordname)
return OK;
}
long streamSetLogfile(const char* filename)
{
FILE *oldfile, *newfile = NULL;
if (filename)
{
newfile = fopen(filename, "w");
if (!newfile)
{
fprintf(stderr, "Opening file %s failed: %s\n", filename, strerror(errno));
return ERROR;
}
}
oldfile = StreamDebugFile;
StreamDebugFile = newfile;
if (oldfile) fclose(oldfile);
return OK;
}
#ifndef EPICS_3_13
static const iocshArg streamReloadArg0 =
{ "recordname", iocshArgString };
@ -262,10 +281,23 @@ void streamReportRecordFunc (const iocshArgBuf *args)
streamReportRecord(args[0].sval);
}
static const iocshArg streamSetLogfileArg0 =
{ "filename", iocshArgString };
static const iocshArg * const streamSetLogfileArgs[] =
{ &streamSetLogfileArg0 };
static const iocshFuncDef streamSetLogfileDef =
{ "streamSetLogfile", 1, streamSetLogfileArgs };
void streamSetLogfileFunc (const iocshArgBuf *args)
{
streamSetLogfile(args[0].sval);
}
static void streamRegistrar ()
{
iocshRegister(&streamReloadDef, streamReloadFunc);
iocshRegister(&streamReportRecordDef, streamReportRecordFunc);
iocshRegister(&streamSetLogfileDef, streamSetLogfileFunc);
// make streamReload available for subroutine records
registryFunctionAdd("streamReload",
(REGISTRYFUNCTION)streamReloadSub);
@ -276,6 +308,8 @@ static void streamRegistrar ()
extern "C" {
epicsExportRegistrar(streamRegistrar);
}
#endif // !EPICS_3_13
// driver support ////////////////////////////////////////////////////////

View File

@ -60,10 +60,6 @@ endif
PROD_LIBS += $(EPICS_BASE_IOC_LIBS)
# Write StreamDevice debug output to this file
# If unset output goes to stdout
CPPFLAGS += -DDEBUGFILE=StreamDebug.log
# switch off annoying rset warnings in 3.16+
CPPFLAGS += -DUSE_TYPED_RSET
@ -74,6 +70,6 @@ clean:
else
clean::
endif
$(RM) core* StreamDebug.log
$(RM) core* *.log
endif

View File

@ -32,6 +32,9 @@ asynOctetSetOutputEos "terminal",0,"\r\n"
#load the records
dbLoadRecords "example.db","PREFIX=DZ"
#log debug output to file
#streamSetLogfile StreamDebug.log
#lots(!) of debug output before iocInit
#var streamDebug 1

View File

@ -8,6 +8,9 @@ drvAsynIPPortConfigure web epics.web.psi.ch:80 0 1
dbLoadRecords regexp.db
#log debug output to file
#streamSetLogfile StreamDebug.log
iocInit
#var streamDebug 1

View File

@ -14,7 +14,10 @@ drvAsynIPPortConfigure "L0", "localhost:40000"
#load the records
dbLoadRecords "simple.db","P=DZ,BUS=L0 28"
#log debug output to file
#streamSetLogfile StreamDebug.log
iocInit
#enable debug output
var streamDebug 1
#var streamDebug 1

View File

@ -19,15 +19,9 @@
#include "epicsThread.h"
#include "iocsh.h"
#include "devStream.h"
int main(int argc,char *argv[])
{
#ifdef DEBUGFILE
#define STR2(x) #x
#define STR(x) STR2(x)
StreamDebugFile = fopen(STR(DEBUGFILE), "w");
#endif
if(argc>=2) {
iocsh(argv[1]);
epicsThreadSleep(.2);

View File

@ -8,5 +8,10 @@ epicsEnvSet "STREAM_PROTOCOL_PATH", "."
drvAsynIPPortConfigure "terminal", "localhost:40000"
dbLoadRecords "test.db","P=TEST"
#log debug output to file
#streamSetLogfile StreamDebug.log
iocInit
#var streamDebug 1