[Zope-Checkins] CVS: Zope/lib/python/zLOG - EventLogger.py:1.10 component.xml:1.11 datatypes.py:1.15 LogHandlers.py:NONE factory.py:NONE

Fred L. Drake, Jr. fred at zope.com
Mon Jan 5 12:04:43 EST 2004


Update of /cvs-repository/Zope/lib/python/zLOG
In directory cvs.zope.org:/tmp/cvs-serv2498/zLOG

Modified Files:
	EventLogger.py component.xml datatypes.py 
Removed Files:
	LogHandlers.py factory.py 
Log Message:
update zLOG configuration component to make use of the ZConfig support for
the logging package; this avoids lots of code duplication


=== Zope/lib/python/zLOG/EventLogger.py 1.9 => 1.10 ===
--- Zope/lib/python/zLOG/EventLogger.py:1.9	Sat Aug  2 01:34:32 2003
+++ Zope/lib/python/zLOG/EventLogger.py	Mon Jan  5 12:04:12 2004
@@ -22,7 +22,7 @@
 import os, sys, time
 import logging
 from BaseLogger import BaseLogger
-from LogHandlers import FileHandler, NullHandler, SysLogHandler
+from ZConfig.components.logger import loghandler
 from logging import StreamHandler, Formatter
 
 # Custom logging levels
@@ -36,7 +36,7 @@
     # Get our logger object:
     logger = logging.getLogger('event')
     # Add a null handler to prevent warnings about loggers with no handlers:
-    logger.addHandler(NullHandler())
+    logger.addHandler(loghandler.NullHandler())
     logger.propagate = 0
 
     def log(self, subsystem, severity, summary, detail, error):
@@ -174,14 +174,14 @@
     # set up syslog handler if necessary
     facility, syslogdest = get_env_syslog_info()
     if syslogdest:
-        handler = SysLogHandler(syslogdest, facility)
+        handler = loghandler.SysLogHandler(syslogdest, facility)
         handler.setFormatter(formatters['syslog'])
         handlers.append(handler)
 
     # set up file handler if necessary
     filedest = get_env_file_info()
     if filedest:
-        handler = FileHandler(filedest)
+        handler = loghandler.FileHandler(filedest)
         handler.setFormatter(formatters['file'])
         handlers.append(handler)
     elif filedest == '':
@@ -192,7 +192,7 @@
     else:
         # log to nowhere, but install a 'null' handler in order to
         # prevent error messages from emanating due to a missing handler
-        handlers.append(NullHandler())
+        handlers.append(loghandler.NullHandler())
 
     severity = get_env_severity_info()
     severity = zlog_to_pep282_severity(severity)


=== Zope/lib/python/zLOG/component.xml 1.10 => 1.11 ===
--- Zope/lib/python/zLOG/component.xml:1.10	Thu Nov  6 02:59:11 2003
+++ Zope/lib/python/zLOG/component.xml	Mon Jan  5 12:04:12 2004
@@ -1,61 +1,17 @@
 <component prefix="zLOG.datatypes">
 
-  <abstracttype name="zLOG.loghandler"/>
+  <import package="ZConfig.components.logger" file="abstract.xml"/>
+  <import package="ZConfig.components.logger" file="handlers.xml"/>
 
-  <sectiontype name="zLOG.base-log-handler">
-    <description>
-      Base type for most log handlers.  This is cannot be used as a
-      loghandler directly since it doesn't implement the loghandler
-      abstract section type.
-    </description>
-    <key name="dateformat" default="%Y-%m-%dT%H:%M:%S"/>
-    <key name="level" default="notset" datatype=".logging_level"/>
-  </sectiontype>
-
-  <sectiontype name="logfile" datatype=".FileHandlerFactory"
-               implements="zLOG.loghandler" extends="zLOG.base-log-handler">
-    <key name="path" required="yes"/>
-    <key name="format" default="------\n%(asctime)s %(message)s"
-         datatype=".log_format"/>
-  </sectiontype>
-
-  <sectiontype name="syslog" datatype=".SyslogHandlerFactory"
-               implements="zLOG.loghandler" extends="zLOG.base-log-handler">
-    <key name="facility" default="user" datatype=".syslog_facility"/>
-    <key name="address" datatype="socket-address" default="localhost:514"/>
-    <key name="format" default="%(message)s"
-         datatype=".log_format"/>
-  </sectiontype>
-
-  <sectiontype name="win32-eventlog" datatype=".Win32EventLogFactory"
-               implements="zLOG.loghandler" extends="zLOG.base-log-handler">
-    <key name="appname" default="Zope"/>
-    <key name="format" default="%(message)s"
-         datatype=".log_format"/>
-  </sectiontype>
-
-  <sectiontype name="http-logger" datatype=".HTTPHandlerFactory"
-               implements="zLOG.loghandler" extends="zLOG.base-log-handler">
-    <key name="url" default="http://localhost/" datatype=".http_handler_url"/>
-    <key name="method" default="GET" datatype=".get_or_post"/>
-    <key name="format" default="%(asctime)s %(message)s"
-         datatype=".log_format"/>
-  </sectiontype>
-
-  <sectiontype name="email-notifier" datatype=".SMTPHandlerFactory"
-               implements="zLOG.loghandler" extends="zLOG.base-log-handler">
-    <key name="from" required="yes" attribute="fromaddr"/>
-    <multikey name="to" required="yes" attribute="toaddrs"/>
-    <key name="subject" default="Message from Zope"/>
-    <key name="smtp-server" default="localhost" datatype="inet-address"/>
-    <key name="format" default="%(asctime)s %(message)s"
-         datatype=".log_format"/>
-  </sectiontype>
-
-
-  <sectiontype name="eventlog" datatype=".EventLogFactory">
-     <key name="level" datatype=".logging_level" default="info"/>
-     <multisection type="zLOG.loghandler" attribute="handlers" name="*"/>
+  <sectiontype name="eventlog"
+               datatype=".EventLogFactory">
+     <key name="level"
+          datatype="ZConfig.components.logger.datatypes.logging_level"
+          default="info"/>
+     <multisection name="*"
+                   type="ZConfig.logger.handler"
+                   attribute="handlers"
+                   />
   </sectiontype>
 
 </component>


=== Zope/lib/python/zLOG/datatypes.py 1.14 => 1.15 ===
--- Zope/lib/python/zLOG/datatypes.py:1.14	Wed Dec 31 15:38:41 2003
+++ Zope/lib/python/zLOG/datatypes.py	Mon Jan  5 12:04:12 2004
@@ -14,191 +14,10 @@
 
 """ZConfig datatypes for logging support."""
 
-import sys
-
 import zLOG
 
 from zLOG import EventLogger
-from zLOG.factory import Factory
-
-# log-related datatypes
-
-_logging_levels = {
-    "critical": 50,
-    "fatal": 50,
-    "error": 40,
-    "warn": 30,
-    "warning": 30,
-    "info": 20,
-    "blather": 15,
-    "debug": 10,
-    "trace": 5,
-    "all": 1,
-    "notset": 0,
-    }
-
-def logging_level(value):
-    s = str(value).lower()
-    if _logging_levels.has_key(s):
-        return _logging_levels[s]
-    else:
-        v = int(s)
-        if v < 0 or v > 50:
-            raise ValueError("log level not in range: " + `v`)
-        return v
-
-_log_format_variables = {
-    'name': '',
-    'levelno': '3',
-    'levelname': 'DEBUG',
-    'pathname': 'apath',
-    'filename': 'afile',
-    'module': 'amodule',
-    'lineno': 1,
-    'created': 1.1,
-    'asctime': 'atime',
-    'msecs': 1,
-    'relativeCreated': 1,
-    'thread': 1,
-    'message': 'amessage',
-    }
-
-def log_format(value):
-    value = ctrl_char_insert(value)
-    try:
-        # Make sure the format string uses only names that will be
-        # provided, and has reasonable type flags for each, and does
-        # not expect positional args.
-        value % _log_format_variables
-    except (ValueError, KeyError):
-        raise ValueError, 'Invalid log format string %s' % value
-    return value
-
-_control_char_rewrites = {r'\n': '\n', r'\t': '\t', r'\b': '\b',
-                          r'\f': '\f', r'\r': '\r'}.items()
-
-def ctrl_char_insert(value):
-    for pattern, replacement in _control_char_rewrites:
-        value = value.replace(pattern, replacement)
-    return value
-
-
-class HandlerFactory(Factory):
-    def __init__(self, section):
-        Factory.__init__(self)
-        self.section = section
-
-    def create_loghandler(self):
-        raise NotImplementedError(
-            "subclasses must override create_loghandler()")
-
-    def create(self):
-        import logging
-        logger = self.create_loghandler()
-        logger.setFormatter(logging.Formatter(self.section.format,
-                                              self.section.dateformat))
-        logger.setLevel(self.section.level)
-        return logger
-
-    def getLevel(self):
-        return self.section.level
-
-class FileHandlerFactory(HandlerFactory):
-    def create_loghandler(self):
-        from zLOG.LogHandlers import StreamHandler, FileHandler
-        path = self.section.path
-        if path == "STDERR":
-            return StreamHandler(sys.stderr)
-        if path == "STDOUT":
-            return StreamHandler(sys.stdout)
-        return FileHandler(path)
-
-_syslog_facilities = {
-    "auth": 1,
-    "authpriv": 1,
-    "cron": 1,
-    "daemon": 1,
-    "kern": 1,
-    "lpr": 1,
-    "mail": 1,
-    "news": 1,
-    "security": 1,
-    "syslog": 1,
-    "user": 1,
-    "uucp": 1,
-    "local0": 1,
-    "local1": 1,
-    "local2": 1,
-    "local3": 1,
-    "local4": 1,
-    "local5": 1,
-    "local6": 1,
-    "local7": 1,
-    }
-
-def syslog_facility(value):
-    value = value.lower()
-    if not _syslog_facilities.has_key(value):
-        L = _syslog_facilities.keys()
-        L.sort()
-        raise ValueError("Syslog facility must be one of " + ", ".join(L))
-    return value
-
-class SyslogHandlerFactory(HandlerFactory):
-    def create_loghandler(self):
-        from zLOG.LogHandlers import SysLogHandler
-        return SysLogHandler(self.section.address.address,
-                             self.section.facility)
-
-class Win32EventLogFactory(HandlerFactory):
-    def create_loghandler(self):
-        from zLOG.LogHandlers import Win32EventLogHandler
-        return Win32EventLogHandler(self.section.appname)
-
-def http_handler_url(value):
-    import urlparse
-    scheme, netloc, path, param, query, fragment = urlparse.urlparse(value)
-    if scheme != 'http':
-        raise ValueError, 'url must be an http url'
-    if not netloc:
-        raise ValueError, 'url must specify a location'
-    if not path:
-        raise ValueError, 'url must specify a path'
-    q = []
-    if param:
-        q.append(';')
-        q.append(param)
-    if query:
-        q.append('?')
-        q.append(query)
-    if fragment:
-        q.append('#')
-        q.append(fragment)
-    return (netloc, path + ''.join(q))
-
-def get_or_post(value):
-    value = value.upper()
-    if value not in ('GET', 'POST'):
-        raise ValueError('method must be "GET" or "POST", instead received: '
-                         + repr(value))
-    return value
-
-class HTTPHandlerFactory(HandlerFactory):
-    def create_loghandler(self):
-        from zLOG.LogHandlers import HTTPHandler
-        host, selector = self.section.url
-        return HTTPHandler(host, selector, self.section.method)
-
-class SMTPHandlerFactory(HandlerFactory):
-    def create_loghandler(self):
-        from zLOG.LogHandlers import SMTPHandler
-        host, port = self.section.smtp_server
-        if not port:
-            mailhost = host
-        else:
-            mailhost = host, port
-        return SMTPHandler(mailhost, self.section.fromaddr,
-                           self.section.toaddrs, self.section.subject)
+from ZConfig.components.logger.factory import Factory
 
 
 class EventLogFactory(Factory):
@@ -227,7 +46,7 @@
                 handler = handler_factory()
                 logger.addHandler(handler)
         else:
-            from zLOG.LogHandlers import NullHandler
+            from ZConfig.components.logger.loghandler import NullHandler
             logger.addHandler(NullHandler())
         return logger
 
@@ -252,23 +71,3 @@
     def startup(self):
         zLOG.set_initializer(self.initialize)
         zLOG.initialize()
-
-
-def importable_name(name):
-    try:
-        components = name.split('.')
-        start = components[0]
-        g = globals()
-        package = __import__(start, g, g)
-        modulenames = [start]
-        for component in components[1:]:
-            modulenames.append(component)
-            try:
-                package = getattr(package, component)
-            except AttributeError:
-                n = '.'.join(modulenames)
-                package = __import__(n, g, g, component)
-        return package
-    except ImportError:
-        raise ValueError, (
-            'The object named by "%s" could not be imported' %  name )

=== Removed File Zope/lib/python/zLOG/LogHandlers.py ===

=== Removed File Zope/lib/python/zLOG/factory.py ===




More information about the Zope-Checkins mailing list