summaryrefslogtreecommitdiffstats
path: root/WebKitTools/Scripts/webkitpy/common/system/logutils.py
diff options
context:
space:
mode:
Diffstat (limited to 'WebKitTools/Scripts/webkitpy/common/system/logutils.py')
-rw-r--r--WebKitTools/Scripts/webkitpy/common/system/logutils.py207
1 files changed, 0 insertions, 207 deletions
diff --git a/WebKitTools/Scripts/webkitpy/common/system/logutils.py b/WebKitTools/Scripts/webkitpy/common/system/logutils.py
deleted file mode 100644
index cd4e60f..0000000
--- a/WebKitTools/Scripts/webkitpy/common/system/logutils.py
+++ /dev/null
@@ -1,207 +0,0 @@
-# Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org)
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""Supports webkitpy logging."""
-
-# FIXME: Move this file to webkitpy/python24 since logging needs to
-# be configured prior to running version-checking code.
-
-import logging
-import os
-import sys
-
-import webkitpy
-
-
-_log = logging.getLogger(__name__)
-
-# We set these directory paths lazily in get_logger() below.
-_scripts_dir = ""
-"""The normalized, absolute path to the ...Scripts directory."""
-
-_webkitpy_dir = ""
-"""The normalized, absolute path to the ...Scripts/webkitpy directory."""
-
-
-def _normalize_path(path):
- """Return the given path normalized.
-
- Converts a path to an absolute path, removes any trailing slashes,
- removes any extension, and lower-cases it.
-
- """
- path = os.path.abspath(path)
- path = os.path.normpath(path)
- path = os.path.splitext(path)[0] # Remove the extension, if any.
- path = path.lower()
-
- return path
-
-
-# Observe that the implementation of this function does not require
-# the use of any hard-coded strings like "webkitpy", etc.
-#
-# The main benefit this function has over using--
-#
-# _log = logging.getLogger(__name__)
-#
-# is that get_logger() returns the same value even if __name__ is
-# "__main__" -- i.e. even if the module is the script being executed
-# from the command-line.
-def get_logger(path):
- """Return a logging.logger for the given path.
-
- Returns:
- A logger whose name is the name of the module corresponding to
- the given path. If the module is in webkitpy, the name is
- the fully-qualified dotted module name beginning with webkitpy....
- Otherwise, the name is the base name of the module (i.e. without
- any dotted module name prefix).
-
- Args:
- path: The path of the module. Normally, this parameter should be
- the __file__ variable of the module.
-
- Sample usage:
-
- import webkitpy.common.system.logutils as logutils
-
- _log = logutils.get_logger(__file__)
-
- """
- # Since we assign to _scripts_dir and _webkitpy_dir in this function,
- # we need to declare them global.
- global _scripts_dir
- global _webkitpy_dir
-
- path = _normalize_path(path)
-
- # Lazily evaluate _webkitpy_dir and _scripts_dir.
- if not _scripts_dir:
- # The normalized, absolute path to ...Scripts/webkitpy/__init__.
- webkitpy_path = _normalize_path(webkitpy.__file__)
-
- _webkitpy_dir = os.path.split(webkitpy_path)[0]
- _scripts_dir = os.path.split(_webkitpy_dir)[0]
-
- if path.startswith(_webkitpy_dir):
- # Remove the initial Scripts directory portion, so the path
- # starts with /webkitpy, for example "/webkitpy/init/logutils".
- path = path[len(_scripts_dir):]
-
- parts = []
- while True:
- (path, tail) = os.path.split(path)
- if not tail:
- break
- parts.insert(0, tail)
-
- logger_name = ".".join(parts) # For example, webkitpy.common.system.logutils.
- else:
- # The path is outside of webkitpy. Default to the basename
- # without the extension.
- basename = os.path.basename(path)
- logger_name = os.path.splitext(basename)[0]
-
- return logging.getLogger(logger_name)
-
-
-def _default_handlers(stream):
- """Return a list of the default logging handlers to use.
-
- Args:
- stream: See the configure_logging() docstring.
-
- """
- # Create the filter.
- def should_log(record):
- """Return whether a logging.LogRecord should be logged."""
- # FIXME: Enable the logging of autoinstall messages once
- # autoinstall is adjusted. Currently, autoinstall logs
- # INFO messages when importing already-downloaded packages,
- # which is too verbose.
- if record.name.startswith("webkitpy.thirdparty.autoinstall"):
- return False
- return True
-
- logging_filter = logging.Filter()
- logging_filter.filter = should_log
-
- # Create the handler.
- handler = logging.StreamHandler(stream)
- formatter = logging.Formatter("%(name)s: [%(levelname)s] %(message)s")
- handler.setFormatter(formatter)
- handler.addFilter(logging_filter)
-
- return [handler]
-
-
-def configure_logging(logging_level=None, logger=None, stream=None,
- handlers=None):
- """Configure logging for standard purposes.
-
- Returns:
- A list of references to the logging handlers added to the root
- logger. This allows the caller to later remove the handlers
- using logger.removeHandler. This is useful primarily during unit
- testing where the caller may want to configure logging temporarily
- and then undo the configuring.
-
- Args:
- logging_level: The minimum logging level to log. Defaults to
- logging.INFO.
- logger: A logging.logger instance to configure. This parameter
- should be used only in unit tests. Defaults to the
- root logger.
- stream: A file-like object to which to log used in creating the default
- handlers. The stream must define an "encoding" data attribute,
- or else logging raises an error. Defaults to sys.stderr.
- handlers: A list of logging.Handler instances to add to the logger
- being configured. If this parameter is provided, then the
- stream parameter is not used.
-
- """
- # If the stream does not define an "encoding" data attribute, the
- # logging module can throw an error like the following:
- #
- # Traceback (most recent call last):
- # File "/System/Library/Frameworks/Python.framework/Versions/2.6/...
- # lib/python2.6/logging/__init__.py", line 761, in emit
- # self.stream.write(fs % msg.encode(self.stream.encoding))
- # LookupError: unknown encoding: unknown
- if logging_level is None:
- logging_level = logging.INFO
- if logger is None:
- logger = logging.getLogger()
- if stream is None:
- stream = sys.stderr
- if handlers is None:
- handlers = _default_handlers(stream)
-
- logger.setLevel(logging_level)
-
- for handler in handlers:
- logger.addHandler(handler)
-
- _log.debug("Debug logging enabled.")
-
- return handlers