"Simple Logging Module"
#
# log.py - debugging log service
#
# Alexander Larsson
# Matt Wilson
#
# Copyright 2002 Red Hat, Inc.
#
# This software may be freely redistributed under the terms of the GNU
# library public license.
#
# You should have received a copy of the GNU Library Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# FIXME: use pythons logging handlers
import sys
import logging
import syslog
class LogFile:
"Simple Logging class"
def __init__ (self, progname, level = 0, filename = None):
logging.basicConfig(level=1,
format='%(asctime)s %(levelname)s '
+ progname + ' %(message)s')
self.handle_func = None
if filename == None:
self.syslog = syslog.openlog(progname, syslog.LOG_PID)
self.handle_func = self.syslog_handler
self.logfile = sys.stderr
else:
self.handle_func = self.file_handler
self.open(filename)
self.level = level
def handler(self, msg, level):
"logging callback"
if self.handle_func:
self.handle_func(msg, level)
def close (self):
"close the log"
self.logfile.close ()
def open (self, mfile = None):
"open the log"
if file is str:
logging.basicConfig(
filename=mfile,
filemode='w')
elif mfile:
logging.basicConfig(stream=mfile)
self.logfile = mfile
else:
logging.basicConfig(stream=sys.stderr)
def get_file (self):
"get the file fd"
return self.logfile.fileno ()
def __call__(self, format, *args):
"if you call the class object"
self.handler(format % args)
def file_handler (self, *args, **kwargs):
"file logging callback"
msg = args[0]
level = kwargs.get("level", 1)
#level = logging.CRITICAL - level * 10
if level == 1:
level = logging.INFO
elif level == 2:
level = logging.INFO
elif level >= 3:
level = logging.DEBUG - level + 3
if level <= 0:
level = 1
if level <= 0:
level = 1
logging.log(level, msg)
#self.logfile.write ("[%d] %s: %s\n" % (level, time.ctime(), msg))
def syslog_handler (self, *args, **kwargs):
"syslog logging callback"
msg = args[0]
level = kwargs.get("level", 1)
syslog.syslog(level, msg)
def set_loglevel(self, level):
"set the preferred loglevel"
self.level = level
def log(self, level, message):
"log a normal message"
if self.level >= level:
self.handler(message, level = level)
def ladd(self, level, mfile, message):
"log an add message"
if self.level >= level:
self.handler("++ %s \t%s" % (mfile, message))
def ldel(self, level, mfile, message):
"log a del message"
if self.level >= level:
self.handler("-- %s \t%s" % (mfile, message))
def lch(self, level, mfile, message):
"log a change message"
if self.level >= level:
self.handler("-+ %s \t%s" % (mfile, message))