[Zope-Checkins] CVS: ZODB3/zdaemon - zdoptions.py:1.6

Guido van Rossum guido@python.org
Fri, 17 Jan 2003 15:18:40 -0500


Update of /cvs-repository/ZODB3/zdaemon
In directory cvs.zope.org:/tmp/cvs-serv13082

Modified Files:
	zdoptions.py 
Log Message:
Add support for automatic processing of a <logger> section.  This is
enabled by setting the class variable 'logsectionname'.


=== ZODB3/zdaemon/zdoptions.py 1.5 => 1.6 ===
--- ZODB3/zdaemon/zdoptions.py:1.5	Fri Jan 17 13:11:41 2003
+++ ZODB3/zdaemon/zdoptions.py	Fri Jan 17 15:18:38 2003
@@ -16,6 +16,11 @@
     schema = None
     configroot = None
 
+    # Class variable to control automatic processing of a <logger>
+    # section.  This should be the (possibly dotted) name of something
+    # accessible from configroot, typically "logger".
+    logsectionname = None
+
     # Class variable deciding whether positional arguments are allowed.
     # If you want positional arguments, set this to 1 in your subclass.
     positional_args_allowed = 0
@@ -242,6 +247,30 @@
         for name, message in self.required_map.items():
             if getattr(self, name) is None:
                 self.usage(message)
+
+        if self.logsectionname:
+            self.load_logconf(self.logsectionname)
+
+    def load_logconf(self, sectname="logger"):
+        parts = sectname.split(".")
+        obj = self.configroot
+        for p in parts:
+            if obj == None:
+                break
+            obj = getattr(obj, p)
+        self.config_logger = obj
+        if obj is not None:
+            import zLOG
+            zLOG.set_initializer(self.log_initializer)
+            zLOG.initialize()
+
+    def log_initializer(self):
+        from zLOG import EventLogger
+        logger = self.config_logger()
+        for handler in logger.handlers:
+            if hasattr(handler, "reopen"):
+                handler.reopen()
+        EventLogger.event_logger.logger = logger
 
 
 def _test():