[Zope-Checkins] CVS: ZODB3/zLOG - component.xml:1.3 datatypes.py:1.4

Fred L. Drake, Jr. fred@zope.com
Mon, 20 Jan 2003 18:25:42 -0500


Update of /cvs-repository/ZODB3/zLOG
In directory cvs.zope.org:/tmp/cvs-serv21226/zLOG

Modified Files:
	component.xml datatypes.py 
Log Message:
- re-enable several loghandler types
- make it easier for an admin to configure logging levels
  (by making the defaults more sane)
- refactor the tests a little, in preparation for more tests


=== ZODB3/zLOG/component.xml 1.2 => 1.3 ===
--- ZODB3/zLOG/component.xml:1.2	Thu Jan 16 10:35:57 2003
+++ ZODB3/zLOG/component.xml	Mon Jan 20 18:25:09 2003
@@ -2,60 +2,57 @@
 
   <abstracttype name="loghandler"/>
 
-  <sectiontype name="file-handler" datatype=".file_handler"
-               implements="loghandler">
+  <sectiontype name="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="info" datatype=".logging_level"/>
+  </sectiontype>
+
+  <sectiontype name="logfile" datatype=".file_handler"
+               implements="loghandler" extends="base-log-handler">
     <key name="path" required="yes"/>
     <key name="format" default="------\n%(asctime)s %(message)s"
          datatype=".log_format"/>
-    <key name="dateformat" default="%Y-%m-%dT%H:%M:%S"/>
-    <key name="level" default="info" datatype=".logging_level"/>
   </sectiontype>
 
-  <sectiontype name="syslog-handler" datatype=".syslog_handler"
-               implements="loghandler">
+  <sectiontype name="syslog" datatype=".syslog_handler"
+               implements="loghandler" extends="base-log-handler">
     <key name="facility" default="user" datatype=".syslog_facility"/>
     <key name="address" datatype="socket-address" required="yes"/>
     <key name="format" default="%(message)s"
          datatype=".log_format"/>
-    <key name="dateformat" default="%Y-%m-%dT%H:%M:%S"/>
-    <key name="level" default="info" datatype=".logging_level"/>
   </sectiontype>
 
-<!--
-  <sectiontype name="nteventlog_handler" datatype=".nteventlog_handler"
-               implements="loghandler">
+  <sectiontype name="nteventlog" datatype=".nteventlog_handler"
+               implements="loghandler" extends="base-log-handler">
     <key name="appname" default="Zope"/>
     <key name="format" default="%(message)s"
          datatype=".log_format"/>
-    <key name="dateformat" default="%Y-%m-%dT%H:%M:%S"/>
-    <key name="level" default="info" datatype=".logging_level"/>
   </sectiontype>
 
   <sectiontype name="http_handler" datatype=".http_handler"
-               implements="loghandler">
+               implements="loghandler" extends="base-log-handler">
     <key name="url" default="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"/>
-    <key name="dateformat" default="%Y-%m-%dT%H:%M:%S"/>
-    <key name="level" default="info" datatype=".logging_level"/>
   </sectiontype>
 
   <sectiontype name="smtp_handler" datatype=".smtp_handler"
-               implements="loghandler">
+               implements="loghandler" extends="base-log-handler">
     <key name="fromaddr" required="yes"/>
     <multikey name="toaddr" required="yes" attribute="toaddrs"/>
     <key name="subject" default="Message from Zope"/>
     <key name="host" default="localhost" datatype="inet-address"/>
     <key name="format" default="%(asctime)s %(message)s"
          datatype=".log_format"/>
-    <key name="dateformat" default="%Y-%m-%dT%H:%M:%S"/>
-    <key name="level" default="info" datatype=".logging_level"/>
   </sectiontype>
 
-  <sectiontype name="null_handler" datatype=".null_handler"
-               implements="loghandler"/>
-
+<!--
   <sectiontype name="custom_handler" datatype=".custom_handler"
                implements="loghandler">
     <key name="constructor" datatype="constructor" required="yes"/>
@@ -66,7 +63,7 @@
 -->
 
   <sectiontype name="logger" datatype=".logger">
-     <key name="level" datatype=".logging_level" default="info"/>
+     <key name="level" datatype=".logging_level" default="all"/>
      <multisection type="loghandler" attribute="handlers" name="*"/>
   </sectiontype>
 


=== ZODB3/zLOG/datatypes.py 1.3 => 1.4 ===
--- ZODB3/zLOG/datatypes.py:1.3	Thu Jan 16 10:35:57 2003
+++ ZODB3/zLOG/datatypes.py	Mon Jan 20 18:25:09 2003
@@ -136,84 +136,80 @@
                    section.address.address,
                    section.facility)
 
-## def nteventlog_handler(section):
-##     appname = section.appname
-##     format = section.format
-##     dateformat = section.dateformat
-##     level = section.level
-    
-##     formatter = Factory('logging.Formatter', None, format, dateformat)
-
-##     def callback(inst, formatter=formatter, level=level):
-##         inst.setFormatter(formatter())
-##         inst.setLevel(level)
-
-##     return Factory('zLOG.LogHandlers.NTEventLogHandler', callback, appname)
-
-## def http_handler_url(value):
-##     import urlparse
-##     scheme, netloc, path, query, fragment = urlparse.urlsplit(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 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 '
-##                            '%s' % repr(value))
-##     return value
-
-## def http_handler(section):
-##     host, url = section.url
-##     method     = section.method
-##     format     = section.format
-##     dateformat = section.dateformat
-##     level      = section.level
-    
-##     formatter = Factory('logging.Formatter', None, format, dateformat)
-
-##     def callback(inst, formatter=formatter, level=level):
-##         inst.setFormatter(formatter())
-##         inst.setLevel(level)
-
-##     return Factory('zLOG.LogHandlers.HTTPHandler', callback, host, url, method)
-
-## def smtp_handler(section):
-##     fromaddr   = section.fromaddr
-##     toaddrs    = section.toaddrs
-##     subject    = section.subject
-##     host, port = section.host
-##     format     = section.format
-##     dateformat = section.dateformat
-##     level      = section.level
-    
-##     if not port:
-##         mailhost = host
-##     else:
-##         mailhost = host, port
-##     formatter = Factory('logging.Formatter', None, format, dateformat)
-
-##     def callback(inst, formatter=formatter, level=level):
-##         inst.setFormatter(formatter())
-##         inst.setLevel(level)
-
-##     return Factory('zLOG.LogHandlers.SMTPHandler', callback,
-##                    mailhost, fromaddr, toaddrs, subject)
-
-## def null_handler(section):
-##     return Factory('zLOG.LogHandlers.NullHandler', None)
+def nteventlog_handler(section):
+    def callback(inst,
+                 format=section.format,
+                 dateformat=section.dateformat,
+                 level=section.level):
+        import logging
+        inst.setFormatter(logging.Formatter(format, dateformat))
+        inst.setLevel(level)
+
+    return Factory('zLOG.LogHandlers.NTEventLogHandler', callback,
+                   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
+
+def http_handler(section):
+    def callback(inst,
+                 format=section.format,
+                 dateformat=section.dateformat,
+                 level=section.level):
+        import logging
+        inst.setFormatter(logging.Formatter(format, dateformat))
+        inst.setLevel(level)
+
+    host, selector = section.url
+    return Factory('zLOG.LogHandlers.HTTPHandler',
+                   callback, host, selector, section.method)
+
+def smtp_handler(section):
+    def callback(inst,
+                 format=section.format,
+                 dateformat=section.dateformat,
+                 level=section.level):
+        import logging
+        inst.setFormatter(logging.Formatter(format, dateformat))
+        inst.setLevel(level)
+
+    host, port = section.host
+    if not port:
+        mailhost = host
+    else:
+        mailhost = host, port
+
+    return Factory('zLOG.LogHandlers.SMTPHandler',
+                   callback,
+                   mailhost,
+                   section.fromaddr,
+                   section.toaddrs,
+                   section.subject)
 
 ## def custom_handler(section):
 ##     formatter_klass, formatter_pos, formatter_kw = section.formatter
@@ -257,7 +253,7 @@
             logger.setLevel(self.level)
             if self.handler_factories:
                 for handler_factory in self.handler_factories:
-                    handler =  handler_factory()
+                    handler = handler_factory()
                     logger.addHandler(handler)
             else:
                 from zLOG.LogHandlers import NullHandler