]> granicus.if.org Git - python/commitdiff
Added logging support.
authorGuido van Rossum <guido@python.org>
Thu, 5 Sep 1996 19:07:11 +0000 (19:07 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 5 Sep 1996 19:07:11 +0000 (19:07 +0000)
Lib/cgi.py

index 1984a1db6764a555cd3e0b54474cd955e13cabb6..8bc4177bc229e3ec3cdefe0c6f564f75c1bc57f5 100755 (executable)
@@ -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
 # =================