[Zope-Checkins] CVS: Zope/lib/python/zLOG - MinimalLogger.py:1.20 __init__.py:1.11

Chris McDonough chrism@zope.com
21 Nov 2002 19:00:03 -0500


FWIW, it's probable that zLOG.MinimalLogger is going away.  It will be
replaced with something that uses the PEP282 logger.  There is a
prototype of a PEP282-based logger in the chrism-install-branch
(zLOG.EventLogger). It needs a bit of work because it can't be used
outside of Zope at the moment due to its dependency on being configured
at startup time by the equivalent of z.2py, but it's fully functional.

For this reason, I don't think there is any good reason to check the
initialize_with_config function in to the trunk, especially without
meeting the goal of a larger plan to configure other Zope components
using a common config file and cleaning up the mess that is logging.

On Thu, 2002-11-21 at 18:17, Fred L. Drake, Jr. wrote:
> Update of /cvs-repository/Zope/lib/python/zLOG
> In directory cvs.zope.org:/tmp/cvs-serv31747
> 
> Modified Files:
> 	MinimalLogger.py __init__.py 
> Log Message:
> - zLOG.severity():  Convenience function that converts a value to a
>   severity level.  This allows the common names to be used for
>   severities, not just integers.  This can make configuration data
>   less obscure.
> 
> - Refactor initialize():
>   get_environment_info() pulls information from the environment
>   variables, and this gets passed to initialize_log(), which does
>   nothing to determine the source of the configuration data.
> 
> - New method initialize_with_config():  Load information not provided
>   by the environment from a ZConfig section.  This allows the
>   environment to override a config file, and avoids having the
>   application deal with the specific information needed to configure
>   logging.
> 
> 
> === Zope/lib/python/zLOG/MinimalLogger.py 1.19 => 1.20 ===
> --- Zope/lib/python/zLOG/MinimalLogger.py:1.19	Mon Nov  4 16:38:43 2002
> +++ Zope/lib/python/zLOG/MinimalLogger.py	Thu Nov 21 18:17:57 2002
> @@ -8,12 +8,13 @@
>  # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
>  # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
>  # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
> -# FOR A PARTICULAR PURPOSE
> +# FOR A PARTICULAR PURPOSE.
>  #
>  ##############################################################################
>  __version__='$Revision$'[11:-2]
>  
>  import os, sys, time
> +import zLOG
>  
>  try:
>      import textwrap
> @@ -53,7 +54,39 @@
>          self.initialize()
>  
>      def initialize(self):
> +        path, severity = self.get_environment_info()
> +        self.initialize_log(path, severity)
> +
> +    def initialize_with_config(self, config):
> +        """Initialize logging with information from ZConfig."""
> +        path, severity = self.get_environment_info()
> +
> +        if config is not None:
> +            loginfo = config.getSection("log")
> +            if loginfo is not None:
> +                if path is None:
> +                    path = loginfo.get("path")
> +                if severity is None:
> +                    severity = loginfo.get("level")
> +
> +        self.initialize_log(path, severity)
> +
> +    def initialize_log(self, path, severity):
>          global _log_level
> +
> +        if path is None:
> +            _set_log_dest(None)
> +        elif path:
> +            _set_log_dest(open(path, 'a'))
> +        else:
> +            _set_log_dest(sys.stderr)
> +
> +        if severity:
> +            _log_level = zLOG.severity(severity)
> +        else:
> +            _log_level = 0 # INFO
> +
> +    def get_environment_info(self):
>          eget = os.environ.get
>  
>          # EVENT_LOG_FILE is the preferred envvar, but we accept
> @@ -61,21 +94,14 @@
>          path = eget('EVENT_LOG_FILE')
>          if path is None:
>              path = eget('STUPID_LOG_FILE')
> -        if path is None:
> -            _set_log_dest(None)
> -        else:
> -            if path:
> -                _set_log_dest(open(path, 'a'))
> -            else:
> -                _set_log_dest(sys.stderr)
>  
>          # EVENT_LOG_SEVERITY is the preferred envvar, but we accept
>          # STUPID_LOG_SEVERITY also
> -        severity = eget('EVENT_LOG_SEVERITY') or eget('STUPID_LOG_SEVERITY')
> -        if severity:
> -            _log_level = int(severity)
> -        else:
> -            _log_level = 0 # INFO
> +        severity = eget('EVENT_LOG_SEVERITY')
> +        if severity is None:
> +            severity = eget('STUPID_LOG_SEVERITY')
> +
> +        return path, severity
>  
>      def log(self, subsystem, severity, summary, detail, error):
>          if _log_dest is None or severity < _log_level:
> @@ -112,3 +138,4 @@
>  _log = stupid_log_write()
>  log_write = _log.log
>  initialize = _log.initialize
> +initialize_with_config = _log.initialize_with_config
> 
> 
> === Zope/lib/python/zLOG/__init__.py 1.10 => 1.11 ===
> --- Zope/lib/python/zLOG/__init__.py:1.10	Tue Nov 12 13:17:11 2002
> +++ Zope/lib/python/zLOG/__init__.py	Thu Nov 21 18:17:57 2002
> @@ -8,7 +8,7 @@
>  # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
>  # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
>  # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
> -# FOR A PARTICULAR PURPOSE
> +# FOR A PARTICULAR PURPOSE.
>  #
>  ##############################################################################
>  
> @@ -89,7 +89,7 @@
>  __version__='$Revision$'[11:-2]
>  
>  from MinimalLogger import log_write, log_time, severity_string, \
> -     _set_log_dest, initialize
> +     _set_log_dest, initialize, initialize_with_config
>  from traceback import format_exception
>  
>  # Standard severities
> @@ -101,6 +101,30 @@
>  WARNING =  100
>  ERROR   =  200
>  PANIC   =  300
> +
> +_severity_names = {"trace":   -300,
> +                   "debug":   -200,
> +                   "blather": -100,
> +                   "info":       0,
> +                   "problem":  100,
> +                   "warning":  100,
> +                   "error":    200,
> +                   "panic":    300,
> +                   }
> +
> +def severity(value):
> +    """Return the severity level associated with a value.
> +
> +    The value may be an integer, the repr of an integer, or the name
> +    of a well-known severity value (case-insensitive).
> +    """
> +    try:
> +        return int(value)
> +    except ValueError:
> +        try:
> +            return _severity_names[value.lower()]
> +        except KeyError:
> +            raise ValueError("unknown severity value: " + repr(value))
>  
>  def LOG(subsystem, severity, summary, detail='', error=None, reraise=None):
>      """Log some information
> 
> 
> _______________________________________________
> Zope-Checkins maillist  -  Zope-Checkins@zope.org
> http://lists.zope.org/mailman/listinfo/zope-checkins