in src/generic/log.c [1035:1103]
void __declspec(dllexport) LOG_MSG(Tcl_Interp * interp, int flag, char *filename, int linenr,
char *cmd, char *level, char *msg, ...)
{
Tcl_Obj *errobj = NULL;
Tcl_Obj *resobj = NULL;
#ifdef DEBUG
Tcl_Obj *debugobj = NULL;
#endif
char *msgpart = NULL;
va_list ap;
errobj = Tcl_NewObj();
Tcl_IncrRefCount(errobj);
resobj = Tcl_NewObj();
Tcl_IncrRefCount(resobj);
if (interp == NULL)
Tcl_AppendToObj(errobj, "interp = null", -1);
#ifdef DEBUG
debugobj = Tcl_NewIntObj(linenr);
Tcl_IncrRefCount(debugobj);
Tcl_AppendStringsToObj(errobj, "File:", filename,
", Line:", Tcl_GetString(debugobj),
", ", (char *) NULL);
#endif
Tcl_AppendStringsToObj(errobj, cmd, ": ", msg, (char *) NULL);
if (flag & SET_RESULT)
Tcl_AppendStringsToObj(resobj, msg, NULL);
for (va_start(ap, msg); (msgpart = va_arg(ap, char *)) != NULL;) {
Tcl_AppendStringsToObj(errobj, msgpart, NULL);
if (flag & SET_RESULT)
Tcl_AppendStringsToObj(resobj, msgpart, NULL);
}
va_end(ap);
if (interp != NULL && (flag & WRITE_LOG)) {
webLog(interp, level, Tcl_GetString(errobj));
}
#ifdef WRITE_TO_STDOUT
printf("%s\n", Tcl_GetString(errobj));
fflush(stdout);
#endif
if ((flag & INTERP_ERRORINFO) && (interp != NULL)) {
char *errorInfo = (char *) Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY);
if (errorInfo != NULL)
webLog(interp, WEBLOG_DEBUG, errorInfo);
else
webLog(interp, WEBLOG_DEBUG, "panic: errorInfo not set");
}
if (flag & SET_RESULT)
Tcl_SetObjResult(interp, resobj);
Tcl_DecrRefCount(errobj);
Tcl_DecrRefCount(resobj); /* ok, ref count was incremented before */
#ifdef DEBUG
Tcl_DecrRefCount(debugobj);
#endif
}