Mercurial > genshi > mirror
diff examples/trac/trac/log.py @ 39:93b4dcbafd7b trunk
Copy Trac to main branch.
author | cmlenz |
---|---|
date | Mon, 03 Jul 2006 18:53:27 +0000 |
parents | |
children |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/examples/trac/trac/log.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2003-2006 Edgewall Software +# Copyright (C) 2003-2005 Daniel Lundin <daniel@edgewall.com> +# Copyright (C) 2006 Christian Boos <cboos@neuf.fr> +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://trac.edgewall.com/license.html. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://projects.edgewall.com/trac/. +# +# Author: Daniel Lundin <daniel@edgewall.com> + +import logging +import logging.handlers +import sys + +def logger_factory(logtype='syslog', logfile=None, level='WARNING', + logid='Trac'): + logger = logging.getLogger(logid) + logtype = logtype.lower() + if logtype == 'file': + hdlr = logging.FileHandler(logfile) + elif logtype in ['winlog', 'eventlog', 'nteventlog']: + # Requires win32 extensions + hdlr = logging.handlers.NTEventLogHandler(logid, + logtype='Application') + elif logtype in ['syslog', 'unix']: + hdlr = logging.handlers.SysLogHandler('/dev/log') + elif logtype in ['stderr']: + hdlr = logging.StreamHandler(sys.stderr) + else: + hdlr = logging.handlers.BufferingHandler(0) + # Note: this _really_ throws away log events, as a `MemoryHandler` + # would keep _all_ records in case there's no target handler (a bug?) + + format = 'Trac[%(module)s] %(levelname)s: %(message)s' + if logtype in ['file', 'stderr']: + format = '%(asctime)s ' + format + datefmt = '' + if logtype == 'stderr': + datefmt = '%X' + level = level.upper() + if level in ['DEBUG', 'ALL']: + logger.setLevel(logging.DEBUG) + elif level == 'INFO': + logger.setLevel(logging.INFO) + elif level == 'ERROR': + logger.setLevel(logging.ERROR) + elif level == 'CRITICAL': + logger.setLevel(logging.CRITICAL) + else: + logger.setLevel(logging.WARNING) + formatter = logging.Formatter(format,datefmt) + hdlr.setFormatter(formatter) + logger.addHandler(hdlr) + + return logger