summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1996-09-05 19:07:11 (GMT)
committerGuido van Rossum <guido@python.org>1996-09-05 19:07:11 (GMT)
commitc204c70c1a8a581ea0458657e81a6716404863f5 (patch)
tree78d754b131522542438d2faaf8a027a07c47b3f7 /Lib
parente5e46e0d298be92faf19b069846cb8d039b23884 (diff)
downloadcpython-c204c70c1a8a581ea0458657e81a6716404863f5.zip
cpython-c204c70c1a8a581ea0458657e81a6716404863f5.tar.gz
cpython-c204c70c1a8a581ea0458657e81a6716404863f5.tar.bz2
Added logging support.
Diffstat (limited to 'Lib')
-rwxr-xr-xLib/cgi.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/Lib/cgi.py b/Lib/cgi.py
index 1984a1d..8bc4177 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -183,6 +183,8 @@ sequences. Use this if you need to display text that might contain
such characters in HTML. To translate URLs for inclusion in the HREF
attribute of an <A> tag, use urllib.quote().
+log(fmt, ...): write a line to a log file; see docs for initlog().
+
Caring about security
---------------------
@@ -349,6 +351,11 @@ first two lines have been printed, a traceback will be displayed.
Because no HTML interpretation is going on, the traceback will
readable.
+When all else fails, you may want to insert calls to log() to your
+program or even to a copy of the cgi.py file. Note that this requires
+you to set cgi.logfile to the name of a world-writable file before the
+first call to log() is made!
+
Good luck!
@@ -409,6 +416,59 @@ import string
import sys
import os
+
+# Logging support
+# ===============
+
+logfile = "" # Filename to log to, if not empty
+logfp = None # File object to log to, if not None
+
+def initlog(*allargs):
+ """Write a log message, if there is a log file.
+
+ Even though this function is called initlog(), you should always
+ use log(); log is a variable that is set either to initlog
+ (initially), to dolog (once the log file has been opened), or to
+ nolog (when logging is disabled).
+
+ The first argument is a format string; the remaining arguments (if
+ any) are arguments to the % operator, so e.g.
+ log("%s: %s", "a", "b")
+ will write "a: b" to the log file, followed by a newline.
+
+ If the global logfp is not None, it should be a file object to
+ which log data is written.
+
+ If the global logfp is None, the global logfile may be a string
+ giving a filename to open, in append mode. This file should be
+ world writable!!! If the file can't be opened, logging is
+ silently disabled (since there is no safe place where we could
+ send an error message).
+
+ """
+ global logfp, log
+ if logfile and not logfp:
+ try:
+ logfp = open(logfile, "a")
+ except IOError:
+ pass
+ if not logfp:
+ log = nolog
+ else:
+ log = dolog
+ apply(log, allargs)
+
+def dolog(fmt, *args):
+ """Write a log message to the log file. See initlog() for docs."""
+ logfp.write(fmt%args + "\n")
+
+def nolog(*allargs):
+ """Dummy function, assigned to log when logging is disabled."""
+ pass
+
+log = initlog # The current logging function
+
+
# Parsing functions
# =================