You are viewing a plain text version of this content. The canonical link for it is here.
Posted to websh-cvs@tcl.apache.org by ro...@apache.org on 2005/10/28 00:01:04 UTC
svn commit: r328961 - in /tcl/websh/trunk/src/generic: log.c log.h
modwebsh_ap.c modwebsh_cgi.c
Author: ronnie
Date: Thu Oct 27 15:00:55 2005
New Revision: 328961
URL: http://svn.apache.org/viewcvs?rev=328961&view=rev
Log:
- added keep flag to LogDest and LogLevel structs to
keep track of levels and filters to keep across requests
(the ones created in web::initializer code)
- added special command to delete all but these levels and filters
(web::logfilter delete -requests and web::logdest delete -requests)
to be used in web::ap::perReqCleanup
- adapted Web_Initializer to accommodate this functionality
Modified:
tcl/websh/trunk/src/generic/log.c
tcl/websh/trunk/src/generic/log.h
tcl/websh/trunk/src/generic/modwebsh_ap.c
tcl/websh/trunk/src/generic/modwebsh_cgi.c
Modified: tcl/websh/trunk/src/generic/log.c
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/log.c?rev=328961&r1=328960&r2=328961&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/log.c (original)
+++ tcl/websh/trunk/src/generic/log.c Thu Oct 27 15:00:55 2005
@@ -147,6 +147,7 @@
HashUtlAllocInit(logData->listOfPlugIns, TCL_STRING_KEYS);
logData->logSubst = 0;
+ logData->keep = 0;
}
return logData;
@@ -224,6 +225,7 @@
logLevel = WebAllocInternalData(LogLevel);
if (logLevel != NULL) {
+ logLevel->keep = 0;
logLevel->facility = NULL;
logLevel->minSeverity = -1;
logLevel->maxSeverity = -1;
@@ -347,14 +349,14 @@
/* ----------------------------------------------------------------------------
* createLogDest --
* ------------------------------------------------------------------------- */
-LogDest *createLogDest(void)
+LogDest *createLogDest()
{
LogDest *logDest = NULL;
logDest = WebAllocInternalData(LogDest);
- logDest->filter = NULL;
+ logDest->keep = 0;
logDest->format = NULL;
logDest->maxCharInMsg = -1; /* Tcl_Append... --> -1 is all chars */
logDest->plugIn = NULL;
@@ -613,6 +615,7 @@
logDest->plugIn = logPlugIn;
logDest->plugInData = logPlugInData;
logDest->maxCharInMsg = maxCharInMsg;
+ logDest->keep = logData->keep;
/* ----------------------------------------------------------
* and add to list
@@ -685,20 +688,32 @@
switch (objc) {
case 3: {
- int inx = getIndexFromLogName(LOG_DEST_PREFIX"%d", Tcl_GetString(objv[2]));
LogDest ** logDests = logData->listOfDests;
- if (inx < 0
- || inx >= logData->destSize
- || logDests[inx] == NULL) {
- Tcl_SetResult(interp, "no such log destination \"", NULL);
- Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
- NULL);
- return TCL_ERROR;
+ if (!strcmp("-requests", Tcl_GetString(objv[2]))) {
+ /* special case: delete all destinations NOT created during web::initializer */
+ int i;
+ for (i = 0; i < logData->destSize; i++) {
+ if (logDests[i] != NULL && !logDests[i]->keep) {
+ destroyLogDest(logDests[i], interp);
+ logDests[i] = NULL;
+ }
+ }
+ return TCL_OK;
+ } else {
+ int inx = getIndexFromLogName(LOG_DEST_PREFIX"%d", Tcl_GetString(objv[2]));
+ if (inx < 0
+ || inx >= logData->destSize
+ || logDests[inx] == NULL) {
+ Tcl_SetResult(interp, "no such log destination \"", NULL);
+ Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
+ NULL);
+ return TCL_ERROR;
+ }
+ destroyLogDest(logDests[inx], interp);
+ logDests[inx] = NULL;
+ return TCL_OK;
+ break;
}
- destroyLogDest(logDests[inx], interp);
- logDests[inx] = NULL;
- return TCL_OK;
- break;
}
case 2:
/* --------------------------------------------------------
@@ -798,6 +813,7 @@
WebFreeIfNotNull(name);
return TCL_ERROR;
}
+ logLevel->keep = logData->keep;
/* ------------------------------------------------------------------------
* and add to list
@@ -871,20 +887,32 @@
switch (objc) {
case 3: {
- int inx = getIndexFromLogName(LOG_FILTER_PREFIX"%d", Tcl_GetString(objv[2]));
LogLevel ** logLevels = logData->listOfFilters;
- if (inx < 0
- || inx >= logData->filterSize
- || logLevels[inx] == NULL) {
- Tcl_SetResult(interp, "no such log filter \"", NULL);
- Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
- NULL);
- return TCL_ERROR;
+ if (!strcmp("-requests", Tcl_GetString(objv[2]))) {
+ /* special case: delete all levels NOT created during web::initializer */
+ int i;
+ for (i = 0; i < logData->filterSize; i++) {
+ if (logLevels[i] != NULL && !logLevels[i]->keep) {
+ destroyLogLevel(logLevels[i], interp);
+ logLevels[i] = NULL;
+ }
+ }
+ return TCL_OK;
+ } else {
+ int inx = getIndexFromLogName(LOG_FILTER_PREFIX"%d", Tcl_GetString(objv[2]));
+ if (inx < 0
+ || inx >= logData->filterSize
+ || logLevels[inx] == NULL) {
+ Tcl_SetResult(interp, "no such log filter \"", NULL);
+ Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
+ NULL);
+ return TCL_ERROR;
+ }
+ destroyLogLevel(logLevels[inx], interp);
+ logLevels[inx] = NULL;
+ return TCL_OK;
+ break;
}
- destroyLogLevel(logLevels[inx], interp);
- logLevels[inx] = NULL;
- return TCL_OK;
- break;
}
case 2:
/* -----------------------------------------------------
Modified: tcl/websh/trunk/src/generic/log.h
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/log.h?rev=328961&r1=328960&r2=328961&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/log.h (original)
+++ tcl/websh/trunk/src/generic/log.h Thu Oct 27 15:00:55 2005
@@ -103,6 +103,7 @@
* ------------------------------------------------------------------------- */
typedef struct LogLevel
{
+ int keep;
char *facility;
Severity minSeverity;
Severity maxSeverity; /* only used for filter */
@@ -140,6 +141,7 @@
* ------------------------------------------------------------------------- */
typedef struct LogDest
{
+ int keep;
LogLevel *filter;
char *format;
long maxCharInMsg;
@@ -165,6 +167,7 @@
int destSize; /* site of destination list */
Tcl_HashTable *listOfPlugIns;
int logSubst; /* 1: subst log message, 0: don't (default 0) */
+ int keep; /* flag for log config to keep during initializer code */
/* needed so that global settings can be accessed */
RequestData * requestData;
}
Modified: tcl/websh/trunk/src/generic/modwebsh_ap.c
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/modwebsh_ap.c?rev=328961&r1=328960&r2=328961&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/modwebsh_ap.c (original)
+++ tcl/websh/trunk/src/generic/modwebsh_ap.c Thu Oct 27 15:00:55 2005
@@ -45,9 +45,18 @@
if (webInterp->numrequests == 0) {
+ /* keep track of log stuff */
+ LogData * logData = (LogData *) Tcl_GetAssocData(interp, WEB_LOG_ASSOC_DATA, NULL);
+ if (logData != NULL)
+ logData->keep = 1;
+
Tcl_IncrRefCount(objv[1]);
res = Tcl_EvalObjEx(interp, objv[1], 0);
Tcl_DecrRefCount(objv[1]);
+
+ /* reset log flag */
+ if (logData != NULL)
+ logData->keep = 0;
if (res != TCL_OK) {
Modified: tcl/websh/trunk/src/generic/modwebsh_cgi.c
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/modwebsh_cgi.c?rev=328961&r1=328960&r2=328961&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/modwebsh_cgi.c (original)
+++ tcl/websh/trunk/src/generic/modwebsh_cgi.c Thu Oct 27 15:00:55 2005
@@ -28,11 +28,22 @@
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, "code");
return TCL_ERROR;
- }
- Tcl_IncrRefCount(objv[1]);
- res = Tcl_EvalObjEx(interp, objv[1], 0);
- Tcl_DecrRefCount(objv[1]);
+ } else {
+
+ /* keep track of log stuff */
+ LogData * logData = (LogData *) Tcl_GetAssocData(interp, WEB_LOG_ASSOC_DATA, NULL);
+ if (logData != NULL)
+ logData->keep = 1;
+
+ Tcl_IncrRefCount(objv[1]);
+ res = Tcl_EvalObjEx(interp, objv[1], 0);
+ Tcl_DecrRefCount(objv[1]);
+
+ /* reset log flag */
+ if (logData != NULL)
+ logData->keep = 0;
+ }
return res;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: websh-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: websh-cvs-help@tcl.apache.org