summaryrefslogtreecommitdiffstats
path: root/openstack/common
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-04-28 03:12:40 +0000
committerGerrit Code Review <review@openstack.org>2013-04-28 03:12:40 +0000
commitf8ef97d6b14ecf425e92034449a3743b42829009 (patch)
treebf7f4fa73f229ae36edfe3a42b4e8faa1c67f1f1 /openstack/common
parente79811464cdab63b12e140d4d7a9ec650ddcc3e0 (diff)
parent465e27158725b6b262e251247bc60edaeda2f54d (diff)
downloadoslo-f8ef97d6b14ecf425e92034449a3743b42829009.tar.gz
oslo-f8ef97d6b14ecf425e92034449a3743b42829009.tar.xz
oslo-f8ef97d6b14ecf425e92034449a3743b42829009.zip
Merge "Support for lazily instantiated loggers"
Diffstat (limited to 'openstack/common')
-rw-r--r--openstack/common/log.py36
1 files changed, 33 insertions, 3 deletions
diff --git a/openstack/common/log.py b/openstack/common/log.py
index c29308c..1599dbf 100644
--- a/openstack/common/log.py
+++ b/openstack/common/log.py
@@ -207,7 +207,27 @@ def _get_log_file_path(binary=None):
return '%s.log' % (os.path.join(logdir, binary),)
-class ContextAdapter(logging.LoggerAdapter):
+class BaseLoggerAdapter(logging.LoggerAdapter):
+
+ def audit(self, msg, *args, **kwargs):
+ self.log(logging.AUDIT, msg, *args, **kwargs)
+
+
+class LazyAdapter(BaseLoggerAdapter):
+ def __init__(self, name='unknown', version='unknown'):
+ self._logger = None
+ self.extra = {}
+ self.name = name
+ self.version = version
+
+ @property
+ def logger(self):
+ if not self._logger:
+ self._logger = getLogger(self.name, self.version)
+ return self._logger
+
+
+class ContextAdapter(BaseLoggerAdapter):
warn = logging.LoggerAdapter.warning
def __init__(self, logger, project_name, version_string):
@@ -215,8 +235,9 @@ class ContextAdapter(logging.LoggerAdapter):
self.project = project_name
self.version = version_string
- def audit(self, msg, *args, **kwargs):
- self.log(logging.AUDIT, msg, *args, **kwargs)
+ @property
+ def handlers(self):
+ return self.logger.handlers
def deprecated(self, msg, *args, **kwargs):
stdmsg = _("Deprecated: %s") % msg
@@ -440,6 +461,15 @@ def getLogger(name='unknown', version='unknown'):
return _loggers[name]
+def getLazyLogger(name='unknown', version='unknown'):
+ """
+ create a pass-through logger that does not create the real logger
+ until it is really needed and delegates all calls to the real logger
+ once it is created
+ """
+ return LazyAdapter(name, version)
+
+
class WritableLogger(object):
"""A thin wrapper that responds to `write` and logs."""