##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
#
##############################################################################
__version__='$Revision: 1.13 $'[11:-2]
import os, sys, time
from FormatException import format_exception
def severity_string(severity, mapping={
-300: 'TRACE',
-200: 'DEBUG',
-100: 'BLATHER',
0: 'INFO',
100: 'PROBLEM',
200: 'ERROR',
300: 'PANIC',
}):
"""Convert a severity code to a string."""
s = mapping.get(int(severity), '')
return "%s(%s)" % (s, severity)
def log_time():
"""Return a simple time string without spaces suitable for logging."""
return ("%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d"
% time.localtime()[:6])
def _set_log_dest(dest):
global _log_dest
_log_dest = dest
_log_dest = None
_stupid_severity = None
class stupid_log_write:
def __init__(self):
self.initialize()
def initialize(self):
global _log_level
eget = os.environ.get
# EVENT_LOG_FILE is the preferred envvar, but we accept
# STUPID_LOG_FILE also
path = eget('EVENT_LOG_FILE')
if path is None:
path = eget('STUPID_LOG_FILE')
if path is None:
_set_log_dest(None)
else:
if path:
_set_log_dest(open(path, 'a'))
else:
_set_log_dest(sys.stderr)
# EVENT_LOG_SEVERITY is the preferred envvar, but we accept
# STUPID_LOG_SEVERITY also
severity = eget('EVENT_LOG_SEVERITY') or eget('STUPID_LOG_SEVERITY')
if severity:
_log_level = int(severity)
else:
_log_level = 0 # INFO
def log(self, subsystem, severity, summary, detail, error):
if _log_dest is None or severity < _log_level:
return
if detail:
buf = ("------\n"
"%s %s %s %s\n%s" % (log_time(), severity_string(severity),
subsystem, summary, detail))
else:
buf = ("------\n"
"%s %s %s %s" % (log_time(), severity_string(severity),
subsystem, summary))
print >> _log_dest, buf
if error:
try:
lines = format_exception(error[0], error[1], error[2],
limit=100)
print >> _log_dest, ''.join(lines)
except:
print >> _log_dest, "%s: %s" % error[:2]
_log_dest.flush()
_log = stupid_log_write()
log_write = _log.log
initialize = _log.initialize
|