]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Use openstack.common.log for logging.
authorChmouel Boudjnah <chmouel@chmouel.com>
Fri, 20 Jul 2012 10:53:41 +0000 (10:53 +0000)
committerChmouel Boudjnah <chmouel@chmouel.com>
Fri, 20 Jul 2012 12:12:12 +0000 (12:12 +0000)
- We are not using openstack.common.notifier just yet so handedit
  openstack.common.log to use cinder.notifier now.

Change-Id: I9d912904c53a8ef5d90b4ab5792f5577701b6817

77 files changed:
Authors
bin/cinder-all
bin/cinder-api
bin/cinder-manage
bin/cinder-scheduler
bin/cinder-volume
bin/clear_rabbit_queues
cinder/api/auth.py
cinder/api/openstack/__init__.py
cinder/api/openstack/auth.py
cinder/api/openstack/common.py
cinder/api/openstack/extensions.py
cinder/api/openstack/urlmap.py
cinder/api/openstack/volume/__init__.py
cinder/api/openstack/volume/contrib/__init__.py
cinder/api/openstack/volume/contrib/extended_snapshot_attributes.py
cinder/api/openstack/volume/contrib/volume_actions.py
cinder/api/openstack/volume/extensions.py
cinder/api/openstack/volume/snapshots.py
cinder/api/openstack/volume/volumes.py
cinder/api/openstack/wsgi.py
cinder/api/sizelimit.py
cinder/context.py
cinder/db/sqlalchemy/api.py
cinder/db/sqlalchemy/migrate_repo/versions/001_cinder_init.py
cinder/db/sqlalchemy/migration.py
cinder/db/sqlalchemy/session.py
cinder/exception.py
cinder/flags.py
cinder/manager.py
cinder/notifier/api.py
cinder/notifier/capacity_notifier.py
cinder/notifier/list_notifier.py
cinder/notifier/log_notifier.py
cinder/notifier/rabbit_notifier.py
cinder/openstack/common/exception.py
cinder/openstack/common/excutils.py
cinder/openstack/common/importutils.py
cinder/openstack/common/iniparser.py
cinder/openstack/common/log.py [moved from cinder/log.py with 68% similarity]
cinder/openstack/common/rpc/impl_zmq.py
cinder/scheduler/driver.py
cinder/scheduler/manager.py
cinder/service.py
cinder/test.py
cinder/testing/runner.py
cinder/tests/api/openstack/volume/test_router.py
cinder/tests/api/openstack/volume/test_snapshots.py
cinder/tests/fake_utils.py
cinder/tests/integrated/api/client.py
cinder/tests/integrated/integrated_helpers.py
cinder/tests/integrated/test_extensions.py
cinder/tests/integrated/test_login.py
cinder/tests/integrated/test_volumes.py
cinder/tests/integrated/test_xml.py
cinder/tests/notifier/test_list_notifier.py
cinder/tests/test_HpSanISCSIDriver.py
cinder/tests/test_SolidFireSanISCSIDriver.py
cinder/tests/test_log.py [deleted file]
cinder/tests/test_migrations.py
cinder/tests/test_netapp.py
cinder/tests/test_notifier.py
cinder/tests/test_volume.py
cinder/tests/test_volume_types.py
cinder/utils.py
cinder/volume/api.py
cinder/volume/driver.py
cinder/volume/manager.py
cinder/volume/netapp.py
cinder/volume/nexenta/jsonrpc.py
cinder/volume/nexenta/volume.py
cinder/volume/san.py
cinder/volume/volume_types.py
cinder/volume/xensm.py
cinder/wsgi.py
etc/cinder/logging_sample.conf
openstack-common.conf

diff --git a/Authors b/Authors
index 24eb71e78f10a9641d63e57a518f30375ca16c43..70f655259cde3dadd7ead66d7a6a919e6be78835 100644 (file)
--- a/Authors
+++ b/Authors
@@ -6,6 +6,7 @@ Brian Waldon <brian.waldon@rackspace.com>
 Chris Behrens <cbehrens@codestud.com>
 Christopher MacGown <chris@pistoncloud.com>
 Chuck Short <zulcss@ubuntu.com>
+Chmouel Boudjnah <chmouel@chmouel.com>
 Clark Boylan <clark.boylan@gmail.com>
 Craig Vyvial <cp16net@gmail.com>
 Devin Carlen <devin.carlen@gmail.com>
index 5809521aff7fa4684829e3dcb8028be89fd96df1..e3c74eff8c412e41b5ddaf4a185f06d550a46bfd 100755 (executable)
@@ -41,7 +41,7 @@ if os.path.exists(os.path.join(possible_topdir, "cinder", "__init__.py")):
 
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import service
 from cinder import utils
 
@@ -50,7 +50,7 @@ LOG = logging.getLogger('cinder.all')
 
 if __name__ == '__main__':
     flags.parse_args(sys.argv)
-    logging.setup()
+    logging.setup("cinder")
     utils.monkey_patch()
     servers = []
     # cinder-api
index fb16c3ff7bbb41ad92c5c40a6fb326e7911a635e..33d389fac0aff249f81e71c6e4deb59ae8bf16bc 100755 (executable)
@@ -33,13 +33,13 @@ if os.path.exists(os.path.join(possible_topdir, "cinder", "__init__.py")):
 
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import service
 from cinder import utils
 
 if __name__ == '__main__':
     flags.parse_args(sys.argv)
-    logging.setup()
+    logging.setup("cinder")
     utils.monkey_patch()
     server = service.WSGIService('osapi_volume')
     service.serve(server)
index 8e13305ceeccf8557c16abbea0cb77efb560042e..e6b9b8945253a3d7075beb03181fb9080919d0c5 100755 (executable)
@@ -81,7 +81,7 @@ from cinder import db
 from cinder.db import migration
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import importutils
 from cinder.openstack.common import rpc
@@ -531,7 +531,7 @@ def main():
 
     try:
         argv = flags.parse_args(sys.argv)
-        logging.setup()
+        logging.setup("cinder")
     except cfg.ConfigFilesNotFoundError:
         cfgfile = FLAGS.config_file[-1] if FLAGS.config_file else None
         if cfgfile and not os.access(cfgfile, os.R_OK):
index 2295f93b2cf8d34156b876ae2243faeace58fcef..33015b3cad81065a8bc454eb367f28b7aed27af3 100755 (executable)
@@ -37,13 +37,13 @@ if os.path.exists(os.path.join(possible_topdir, 'cinder', '__init__.py')):
 gettext.install('cinder', unicode=1)
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import service
 from cinder import utils
 
 if __name__ == '__main__':
     flags.parse_args(sys.argv)
-    logging.setup()
+    logging.setup("cinder")
     utils.monkey_patch()
     server = service.Service.create(binary='cinder-scheduler')
     service.serve(server)
index fe84581ecd554f1a25dc88655671c80322e89595..b61852300326c371e5f99629ca141f3ebe09f899 100755 (executable)
@@ -35,12 +35,12 @@ if os.path.exists(os.path.join(possible_topdir, 'cinder', '__init__.py')):
 
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import service
 
 if __name__ == '__main__':
     flags.parse_args(sys.argv)
-    logging.setup()
+    logging.setup("cinder")
     utils.monkey_patch()
     server = service.Service.create(binary='cinder-volume')
     service.serve(server)
index 257de633781e981f9b94c86940de0ed1685f2d1f..321a94d90e29377adb0f4313a3ba3a7b19f76794 100755 (executable)
@@ -43,7 +43,7 @@ gettext.install('cinder', unicode=1)
 from cinder import context
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import rpc
 
@@ -71,7 +71,7 @@ def delete_queues(queues):
 
 if __name__ == '__main__':
     args = flags.parse_args(sys.argv)
-    logging.setup()
+    logging.setup("cinder")
     delete_queues(args[1:])
     if FLAGS.delete_exchange:
         delete_exchange(FLAGS.control_exchange)
index 1b8f303e23c6906a7edcb120c607849e90d7e285..9930b7352f6d42f7002de04a48af65f7336a2bed 100644 (file)
@@ -23,7 +23,7 @@ import webob.exc
 
 from cinder import context
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder import wsgi
 
index 22ff5de047a05616274a580a17a95700e1158ebe..2bfaab778d8ec4fdf70598bb224ef4917249d22a 100644 (file)
@@ -25,7 +25,7 @@ import webob.dec
 import webob.exc
 
 from cinder.api.openstack import wsgi
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import wsgi as base_wsgi
 
 
index cbc2084326695d8e026de1236d28c3c5ce1b765a..68c98dad5b23e0f44ef1b6398d70a7c295780846 100644 (file)
@@ -23,7 +23,7 @@ import webob.exc
 from cinder.api.openstack import wsgi
 from cinder import context
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import wsgi as base_wsgi
 
 LOG = logging.getLogger(__name__)
index 0ebe610e0600e63424e760a97deff06e7f2cbde2..4f9e75d1b5a95b0d3764882238f6f2312c748034 100644 (file)
@@ -26,7 +26,7 @@ from xml.dom import minidom
 from cinder.api.openstack import wsgi
 from cinder.api.openstack import xmlutil
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import quota
 
 
index c7bce4b8377d0e374c1d6e6817308757ca85005d..7f443637c7389781b09d8364a19a742edbca7a31 100644 (file)
@@ -26,7 +26,7 @@ from cinder.api.openstack import wsgi
 from cinder.api.openstack import xmlutil
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import exception as common_exception
 from cinder.openstack.common import importutils
 import cinder.policy
index ac3209854058193feaa7b46e6af8c103d0052598..52b7298600e0f111e529f0a35b6a3cbb2877faab 100644 (file)
@@ -19,7 +19,7 @@ import paste.urlmap
 import re
 import urllib2
 
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.api.openstack import wsgi
 
 
index 1b85ed906d03c95130f6ade2742cf02b9b145161..89bf9c067818a60fb3258762cdbe314b174a868c 100644 (file)
@@ -26,7 +26,7 @@ from cinder.api.openstack.volume import snapshots
 from cinder.api.openstack.volume import types
 from cinder.api.openstack.volume import volumes
 from cinder.api.openstack.volume import versions
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 
 LOG = logging.getLogger(__name__)
index c49a4c6d3adf9e7df388f173266723c39d362966..33b312f97eb9ce929ae6decf0b10cda2948fdbff 100644 (file)
@@ -22,7 +22,7 @@ It can't be called 'extensions' because that causes namespacing problems.
 """
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.api.openstack import extensions
 
 
index ba5ec7606cae973faea56350cc55f96c0b9ccd35..10baa2fb70d7337ca658b3a01b9823b6637727c6 100644 (file)
@@ -23,7 +23,7 @@ from cinder import volume
 from cinder import db
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 
 FLAGS = flags.FLAGS
index 1610002636182b34fdd6c701848619ea84b206d5..a06d7aa85ea4a4ea1ed63c66dce2e14eafd38bf4 100644 (file)
@@ -24,7 +24,7 @@ from cinder.api.openstack import wsgi
 from cinder import volume
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 
 FLAGS = flags.FLAGS
index ffe284555e27fb9a59cde4c15073411b1f96b1fa..af1f367a3eb34b19a21cfce0d193f26b62dfed62 100644 (file)
@@ -17,7 +17,7 @@
 
 from cinder.api.openstack import extensions as base_extensions
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 
 LOG = logging.getLogger(__name__)
index 22454e991ce8047774a75f63243cc5c5adc55c0d..3264c3ab2e5ff37576319901ecc8038938538afc 100644 (file)
@@ -23,7 +23,7 @@ from cinder.api.openstack import wsgi
 from cinder.api.openstack import xmlutil
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import volume
 
 
index 289adbf40621f7a5493c1b0db75ca662ae71f64b..fb5cf137c788262fef1d2415efaf05f185d9054a 100644 (file)
@@ -23,7 +23,7 @@ from cinder.api.openstack import wsgi
 from cinder.api.openstack import xmlutil
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import volume
 from cinder.volume import volume_types
 
index 8aff71227b694203dd2eadadb491408bf9a2866f..8314408613ffac0f4c197d6ab032f45d4a655752 100644 (file)
@@ -25,7 +25,7 @@ from lxml import etree
 import webob
 
 from cinder import exception
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import jsonutils
 from cinder import wsgi
 
index 3da38f3ac86488c09d0976ce7c04d3efbd705e8b..2115f7c547367debd2de2f1f3e8b8c681b22bb34 100644 (file)
@@ -23,7 +23,7 @@ import webob.exc
 
 from cinder import context
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder import wsgi
 
index 12ad796b3bcc8b4682760736299329b3b91f7b8c..7e7f2417791f531869e2e170d047dc0db256e971 100644 (file)
@@ -21,7 +21,7 @@
 
 import copy
 
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import local
 from cinder.openstack.common import timeutils
 from cinder import utils
index fbad55e2e07093f9e47b6ce136bc27c7520b82ab..a9d07414138312155cbae5bca8842fc27070a42f 100644 (file)
@@ -26,7 +26,7 @@ from cinder import db
 from cinder import exception
 from cinder import flags
 from cinder import utils
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.db.sqlalchemy import models
 from cinder.db.sqlalchemy.session import get_session
 from cinder.openstack.common import timeutils
index 1e16b04c56b2eede3aea7fb2fc4d8c6fcfdd3b16..6ca30faa9e89758141ea47871e569e5cb56a4e88 100644 (file)
@@ -18,7 +18,7 @@ from sqlalchemy import Boolean, Column, DateTime, ForeignKey
 from sqlalchemy import Integer, MetaData, String, Table
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 FLAGS = flags.FLAGS
 
index 6f0f41d7825f800a04b706e75cba72f6afe596e9..f7617094b2ac4b93e7411bb759c9c2548fc6398a 100644 (file)
@@ -24,7 +24,7 @@ from cinder.db import migration
 from cinder.db.sqlalchemy.session import get_engine
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 
 import sqlalchemy
index fd6eef4ba45542172533a989efe86db99d8fc5d9..ed3600f74c446c331c2050273f2f734a7c1d4b0d 100644 (file)
@@ -27,7 +27,7 @@ from sqlalchemy.pool import NullPool, StaticPool
 
 import cinder.exception
 import cinder.flags as flags
-import cinder.log as logging
+from cinder.openstack.common import log as logging
 
 
 FLAGS = flags.FLAGS
index eacf5f4f09b2b77371f66346145b2ab3087859c6..7ee6eb50233b9899f3c23c40d92fe2ebaf14c257 100644 (file)
@@ -29,7 +29,7 @@ import sys
 
 import webob.exc
 
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 LOG = logging.getLogger(__name__)
 
index fd1e3d66f191144404b243256b0b31a07bedd290..673aae394cd361684eed9727fc4d6cd554a1fedb 100644 (file)
@@ -73,18 +73,6 @@ def _get_my_ip():
         return "127.0.0.1"
 
 
-log_opts = [
-    cfg.StrOpt('logdir',
-               default=None,
-               help='Log output to a per-service log file in named directory'),
-    cfg.StrOpt('logfile',
-               default=None,
-               help='Log output to a named file'),
-    cfg.BoolOpt('use_stderr',
-                default=True,
-                help='Log output to standard error'),
-    ]
-
 core_opts = [
     cfg.StrOpt('connection_type',
                default=None,
@@ -116,7 +104,6 @@ core_opts = [
 debug_opts = [
 ]
 
-FLAGS.register_cli_opts(log_opts)
 FLAGS.register_cli_opts(core_opts)
 FLAGS.register_cli_opts(debug_opts)
 
@@ -205,9 +192,6 @@ global_opts = [
     cfg.IntOpt('auth_token_ttl',
                default=3600,
                help='Seconds for auth tokens to linger'),
-    cfg.StrOpt('logfile_mode',
-               default='0644',
-               help='Default file mode used when creating log files'),
     cfg.StrOpt('sqlite_db',
                default='cinder.sqlite',
                help='the filename to use with sqlite'),
index 670f561307acdecbbce2ffba976bddb77f1e3065..68f3609e51b3a30e6ac5573fd92f06ba79a97ecd 100644 (file)
@@ -55,7 +55,7 @@ This module provides Manager, a base class for managers.
 
 from cinder.db import base
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common.rpc import dispatcher as rpc_dispatcher
 from cinder.scheduler import rpcapi as scheduler_rpcapi
 from cinder import version
index 26498585d2e50ec272da44d03084baa955dac00e..327bd97147526971d995f41b7971d634ab4820a1 100644 (file)
@@ -17,7 +17,7 @@ import uuid
 
 from cinder import flags
 from cinder import utils
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import importutils
 from cinder.openstack.common import jsonutils
index 9cdbb72d013947fe72a60cc236e84ab09a1ea69d..9a3ed5c3b646a33eef2219682943fac59a28628b 100644 (file)
@@ -15,7 +15,7 @@
 
 from cinder import context
 from cinder import db
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 
 LOG = logging.getLogger(__name__)
index 665fad26221343627a909788996a2dc62f9ebde8..e0756719aec0b1d534005c3f4efe071d101f8086 100644 (file)
@@ -14,7 +14,7 @@
 #    under the License.
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import exception as common_exception
 from cinder.openstack.common import importutils
index e6aceaaf3fe3bf21cf7e8684c29007d6b5e14709..47bf016b9b4a6812a6820528178ddac53073b6d6 100644 (file)
@@ -15,7 +15,7 @@
 
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import jsonutils
 
 
index 7dcaace4d200f9e76e1d2e913e6423e189f361de..098ed904d911217a36d689fef1bdeda30ef9141d 100644 (file)
@@ -17,7 +17,7 @@
 import cinder.context
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import rpc
 
index ba32da550b01a1b353becc043b544fecde474eb7..e5da94b9496518923bf69507a22065589e7f4bfa 100644 (file)
@@ -19,6 +19,7 @@
 Exceptions common to OpenStack projects
 """
 
+import itertools
 import logging
 
 
index 3cb678e9d315af8724e09b0f93e272739a316d82..67c9fa951184c2ac5a79d3caf4f9c0eab80938e4 100644 (file)
@@ -44,6 +44,6 @@ def save_and_reraise_exception():
         yield
     except Exception:
         logging.error('Original exception being dropped: %s' %
-                (traceback.format_exception(type_, value, tb)))
+                      (traceback.format_exception(type_, value, tb)))
         raise
     raise type_, value, tb
index 9c0815c72ea8681a4cdfb2368b34c4752e7d1d5f..2fbb0291a06d97182e6c1717da125fe3888623a6 100644 (file)
@@ -20,8 +20,7 @@ Import related utilities and helper functions.
 """
 
 import sys
-
-from cinder.openstack.common import exception
+import traceback
 
 
 def import_class(import_str):
@@ -30,8 +29,10 @@ def import_class(import_str):
     try:
         __import__(mod_str)
         return getattr(sys.modules[mod_str], class_str)
-    except (ImportError, ValueError, AttributeError):
-        raise exception.NotFound('Class %s cannot be found' % class_str)
+    except (ImportError, ValueError, AttributeError), exc:
+        raise ImportError('Class %s cannot be found (%s)' %
+                          (class_str,
+                           traceback.format_exception(*sys.exc_info())))
 
 
 def import_object(import_str, *args, **kwargs):
@@ -39,6 +40,19 @@ def import_object(import_str, *args, **kwargs):
     return import_class(import_str)(*args, **kwargs)
 
 
+def import_object_ns(name_space, import_str, *args, **kwargs):
+    """
+    Import a class and return an instance of it, first by trying
+    to find the class in a default namespace, then failing back to
+    a full path if not found in the default namespace.
+    """
+    import_value = "%s.%s" % (name_space, import_str)
+    try:
+        return import_class(import_value)(*args, **kwargs)
+    except ImportError:
+        return import_class(import_str)(*args, **kwargs)
+
+
 def import_module(import_str):
     """Import a module."""
     __import__(import_str)
index e91eea5380fa4e88a070ede2971bcacfea5107a7..241284449e32c0be0200df6eec92b46b632d4cca 100644 (file)
@@ -53,7 +53,8 @@ class BaseParser(object):
             key, value = line[:colon], line[colon + 1:]
 
         value = value.strip()
-        if value[0] == value[-1] and value[0] == "\"" or value[0] == "'":
+        if ((value and value[0] == value[-1]) and
+            (value[0] == "\"" or value[0] == "'")):
             value = value[1:-1]
         return key.strip(), [value]
 
similarity index 68%
rename from cinder/log.py
rename to cinder/openstack/common/log.py
index 8fec8ebce882255c7f8c7b816e5d718465589a9e..5dbadb27a3d33565763e475953ef543d607b9c12 100644 (file)
@@ -17,7 +17,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-"""Cinder logging handler.
+"""Openstack logging handler.
 
 This module adds to logging functionality by adding the option to specify
 a context object when calling the various log methods.  If the context object
@@ -25,7 +25,7 @@ is not specified, default formatting is used. Additionally, an instance uuid
 may be passed as part of the log message, which is intended to make it easier
 for admins to find messages related to a specific instance.
 
-It also allows setting of formatting information through flags.
+It also allows setting of formatting information through conf.
 
 """
 
@@ -40,12 +40,11 @@ import stat
 import sys
 import traceback
 
-import cinder
-from cinder import flags
 from cinder.openstack.common import cfg
+from cinder.openstack.common.gettextutils import _
 from cinder.openstack.common import jsonutils
 from cinder.openstack.common import local
-from cinder import version
+from cinder import notifier
 
 
 log_opts = [
@@ -67,12 +66,13 @@ log_opts = [
                help='prefix each line of exception output with this format'),
     cfg.ListOpt('default_log_levels',
                 default=[
-                  'amqplib=WARN',
-                  'sqlalchemy=WARN',
-                  'boto=WARN',
-                  'suds=INFO',
-                  'eventlet.wsgi.server=WARN'
-                  ],
+                    'amqplib=WARN',
+                    'sqlalchemy=WARN',
+                    'boto=WARN',
+                    'suds=INFO',
+                    'keystone=INFO',
+                    'eventlet.wsgi.server=WARN'
+                ],
                 help='list of logger=LEVEL pairs'),
     cfg.BoolOpt('publish_errors',
                 default=False,
@@ -89,10 +89,28 @@ log_opts = [
                default='[instance: %(uuid)s] ',
                help='If an instance UUID is passed with the log message, '
                     'format it like this'),
-    ]
+]
 
-FLAGS = flags.FLAGS
-FLAGS.register_opts(log_opts)
+
+generic_log_opts = [
+    cfg.StrOpt('logdir',
+               default=None,
+               help='Log output to a per-service log file in named directory'),
+    cfg.StrOpt('logfile',
+               default=None,
+               help='Log output to a named file'),
+    cfg.BoolOpt('use_stderr',
+                default=True,
+                help='Log output to standard error'),
+    cfg.StrOpt('logfile_mode',
+               default='0644',
+               help='Default file mode used when creating log files'),
+]
+
+
+CONF = cfg.CONF
+CONF.register_opts(generic_log_opts)
+CONF.register_opts(log_opts)
 
 # our new audit level
 # NOTE(jkoelker) Since we synthesized an audit level, make the logging
@@ -128,8 +146,8 @@ def _get_binary_name():
 
 
 def _get_log_file_path(binary=None):
-    logfile = FLAGS.log_file or FLAGS.logfile
-    logdir = FLAGS.log_dir or FLAGS.logdir
+    logfile = CONF.log_file or CONF.logfile
+    logdir = CONF.log_dir or CONF.logdir
 
     if logfile and not logdir:
         return logfile
@@ -142,11 +160,13 @@ def _get_log_file_path(binary=None):
         return '%s.log' % (os.path.join(logdir, binary),)
 
 
-class CinderContextAdapter(logging.LoggerAdapter):
+class ContextAdapter(logging.LoggerAdapter):
     warn = logging.LoggerAdapter.warning
 
-    def __init__(self, logger):
+    def __init__(self, logger, project_name, version_string):
         self.logger = logger
+        self.project = project_name
+        self.version = version_string
 
     def audit(self, msg, *args, **kwargs):
         self.log(logging.AUDIT, msg, *args, **kwargs)
@@ -165,15 +185,16 @@ class CinderContextAdapter(logging.LoggerAdapter):
         instance = kwargs.pop('instance', None)
         instance_extra = ''
         if instance:
-            instance_extra = FLAGS.instance_format % instance
+            instance_extra = CONF.instance_format % instance
         else:
             instance_uuid = kwargs.pop('instance_uuid', None)
             if instance_uuid:
-                instance_extra = (FLAGS.instance_uuid_format
+                instance_extra = (CONF.instance_uuid_format
                                   % {'uuid': instance_uuid})
         extra.update({'instance': instance_extra})
 
-        extra.update({"cinder_version": version.version_string_with_vcs()})
+        extra.update({"project": self.project})
+        extra.update({"version": self.version})
         extra['extra'] = extra.copy()
         return msg, kwargs
 
@@ -187,9 +208,9 @@ class JSONFormatter(logging.Formatter):
     def formatException(self, ei, strip_newlines=True):
         lines = traceback.format_exception(*ei)
         if strip_newlines:
-            lines = [itertools.ifilter(lambda x: x,
-                                      line.rstrip().splitlines())
-                    for line in lines]
+            lines = [itertools.ifilter(
+                lambda x: x,
+                line.rstrip().splitlines()) for line in lines]
             lines = list(itertools.chain(*lines))
         return lines
 
@@ -224,100 +245,47 @@ class JSONFormatter(logging.Formatter):
         return jsonutils.dumps(message)
 
 
-class LegacyCinderFormatter(logging.Formatter):
-    """A cinder.context.RequestContext aware formatter configured via flags.
-
-    The flags used to set format strings are: logging_context_format_string
-    and logging_default_format_string.  You can also specify
-    logging_debug_format_suffix to append extra formatting if the log level is
-    debug.
-
-    For information about what variables are available for the formatter see:
-    http://docs.python.org/library/logging.html#formatter
-
-    """
-
-    def format(self, record):
-        """Uses contextstring if request_id is set, otherwise default."""
-        if 'instance' not in record.__dict__:
-            record.__dict__['instance'] = ''
-
-        if record.__dict__.get('request_id', None):
-            self._fmt = FLAGS.logging_context_format_string
-        else:
-            self._fmt = FLAGS.logging_default_format_string
-
-        if (record.levelno == logging.DEBUG and
-            FLAGS.logging_debug_format_suffix):
-            self._fmt += " " + FLAGS.logging_debug_format_suffix
-
-        # Cache this on the record, Logger will respect our formated copy
-        if record.exc_info:
-            record.exc_text = self.formatException(record.exc_info, record)
-        return logging.Formatter.format(self, record)
-
-    def formatException(self, exc_info, record=None):
-        """Format exception output with FLAGS.logging_exception_prefix."""
-        if not record:
-            return logging.Formatter.formatException(self, exc_info)
-
-        stringbuffer = cStringIO.StringIO()
-        traceback.print_exception(exc_info[0], exc_info[1], exc_info[2],
-                                  None, stringbuffer)
-        lines = stringbuffer.getvalue().split('\n')
-        stringbuffer.close()
-
-        if FLAGS.logging_exception_prefix.find('%(asctime)') != -1:
-            record.asctime = self.formatTime(record, self.datefmt)
-
-        formatted_lines = []
-        for line in lines:
-            pl = FLAGS.logging_exception_prefix % record.__dict__
-            fl = '%s%s' % (pl, line)
-            formatted_lines.append(fl)
-        return '\n'.join(formatted_lines)
-
-
 class PublishErrorsHandler(logging.Handler):
     def emit(self, record):
-        if 'list_notifier_drivers' in FLAGS:
-            if 'cinder.notifier.log_notifier' in FLAGS.list_notifier_drivers:
+        if 'list_notifier_drivers' in CONF:
+            if ('cinder.openstack.common.notifier.log_notifier' in
+                CONF.list_notifier_drivers):
                 return
-        cinder.notifier.api.notify('cinder.error.publisher',
-                'error_notification',
-                cinder.notifier.api.ERROR,
-                dict(error=record.msg))
+        notifier.api.notify('error.publisher',
+                            'error_notification',
+                            notifier.api.ERROR,
+                            dict(error=record.msg))
 
 
 def handle_exception(type, value, tb):
     extra = {}
-    if FLAGS.verbose:
+    if CONF.verbose:
         extra['exc_info'] = (type, value, tb)
     getLogger().critical(str(value), **extra)
 
 
-def setup():
-    """Setup cinder logging."""
+def setup(product_name):
+    """Setup logging."""
     sys.excepthook = handle_exception
 
-    if FLAGS.log_config:
+    if CONF.log_config:
         try:
-            logging.config.fileConfig(FLAGS.log_config)
+            logging.config.fileConfig(CONF.log_config)
         except Exception:
             traceback.print_exc()
             raise
     else:
-        _setup_logging_from_flags()
+        _setup_logging_from_conf(product_name)
 
 
-def _find_facility_from_flags():
+def _find_facility_from_conf():
     facility_names = logging.handlers.SysLogHandler.facility_names
     facility = getattr(logging.handlers.SysLogHandler,
-                       FLAGS.syslog_log_facility,
+                       CONF.syslog_log_facility,
                        None)
 
-    if facility is None and FLAGS.syslog_log_facility in facility_names:
-        facility = facility_names.get(FLAGS.syslog_log_facility)
+    if facility is None and CONF.syslog_log_facility in facility_names:
+        facility = facility_names.get(CONF.syslog_log_facility)
 
     if facility is None:
         valid_facilities = facility_names.keys()
@@ -334,59 +302,63 @@ def _find_facility_from_flags():
     return facility
 
 
-def _setup_logging_from_flags():
-    cinder_root = getLogger().logger
-    for handler in cinder_root.handlers:
-        cinder_root.removeHandler(handler)
+def _setup_logging_from_conf(product_name):
+    log_root = getLogger(product_name).logger
+    for handler in log_root.handlers:
+        log_root.removeHandler(handler)
 
-    if FLAGS.use_syslog:
-        facility = _find_facility_from_flags()
+    if CONF.use_syslog:
+        facility = _find_facility_from_conf()
         syslog = logging.handlers.SysLogHandler(address='/dev/log',
                                                 facility=facility)
-        cinder_root.addHandler(syslog)
+        log_root.addHandler(syslog)
 
     logpath = _get_log_file_path()
     if logpath:
         filelog = logging.handlers.WatchedFileHandler(logpath)
-        cinder_root.addHandler(filelog)
+        log_root.addHandler(filelog)
 
-        mode = int(FLAGS.logfile_mode, 8)
+        mode = int(CONF.logfile_mode, 8)
         st = os.stat(logpath)
         if st.st_mode != (stat.S_IFREG | mode):
             os.chmod(logpath, mode)
 
-    if FLAGS.use_stderr:
-        streamlog = logging.StreamHandler()
-        cinder_root.addHandler(streamlog)
+    if CONF.use_stderr:
+        streamlog = ColorHandler()
+        log_root.addHandler(streamlog)
 
-    elif not FLAGS.log_file:
-        streamlog = logging.StreamHandler(stream=sys.stdout)
-        cinder_root.addHandler(streamlog)
+    elif not CONF.log_file:
+        # pass sys.stdout as a positional argument
+        # python2.6 calls the argument strm, in 2.7 it's stream
+        streamlog = logging.StreamHandler(sys.stdout)
+        log_root.addHandler(streamlog)
 
-    if FLAGS.publish_errors:
-        cinder_root.addHandler(PublishErrorsHandler(logging.ERROR))
+    if CONF.publish_errors:
+        log_root.addHandler(PublishErrorsHandler(logging.ERROR))
 
-    for handler in cinder_root.handlers:
-        datefmt = FLAGS.log_date_format
-        if FLAGS.log_format:
-            handler.setFormatter(logging.Formatter(fmt=FLAGS.log_format,
+    for handler in log_root.handlers:
+        datefmt = CONF.log_date_format
+        if CONF.log_format:
+            handler.setFormatter(logging.Formatter(fmt=CONF.log_format,
                                                    datefmt=datefmt))
-        handler.setFormatter(LegacyCinderFormatter(datefmt=datefmt))
+        handler.setFormatter(LegacyFormatter(datefmt=datefmt))
 
-    if FLAGS.verbose or FLAGS.debug:
-        cinder_root.setLevel(logging.DEBUG)
+    if CONF.verbose or CONF.debug:
+        log_root.setLevel(logging.DEBUG)
     else:
-        cinder_root.setLevel(logging.INFO)
+        log_root.setLevel(logging.INFO)
 
     level = logging.NOTSET
-    for pair in FLAGS.default_log_levels:
+    for pair in CONF.default_log_levels:
         mod, _sep, level_name = pair.partition('=')
         level = logging.getLevelName(level_name)
         logger = logging.getLogger(mod)
         logger.setLevel(level)
+        for handler in log_root.handlers:
+            logger.addHandler(handler)
 
     # NOTE(jkoelker) Clear the handlers for the root logger that was setup
-    #                by basicConfig in cinder/__init__.py and install the
+    #                by basicConfig in nova/__init__.py and install the
     #                NullHandler.
     root = logging.getLogger()
     for handler in root.handlers:
@@ -399,9 +371,11 @@ def _setup_logging_from_flags():
 _loggers = {}
 
 
-def getLogger(name='cinder'):
+def getLogger(name='unknown', version='unknown'):
     if name not in _loggers:
-        _loggers[name] = CinderContextAdapter(logging.getLogger(name))
+        _loggers[name] = ContextAdapter(logging.getLogger(name),
+                                        name,
+                                        version)
     return _loggers[name]
 
 
@@ -414,3 +388,72 @@ class WritableLogger(object):
 
     def write(self, msg):
         self.logger.log(self.level, msg)
+
+
+class LegacyFormatter(logging.Formatter):
+    """A context.RequestContext aware formatter configured through flags.
+
+    The flags used to set format strings are: logging_context_format_string
+    and logging_default_format_string.  You can also specify
+    logging_debug_format_suffix to append extra formatting if the log level is
+    debug.
+
+    For information about what variables are available for the formatter see:
+    http://docs.python.org/library/logging.html#formatter
+
+    """
+
+    def format(self, record):
+        """Uses contextstring if request_id is set, otherwise default."""
+        if 'instance' not in record.__dict__:
+            record.__dict__['instance'] = ''
+
+        if record.__dict__.get('request_id', None):
+            self._fmt = CONF.logging_context_format_string
+        else:
+            self._fmt = CONF.logging_default_format_string
+
+        if (record.levelno == logging.DEBUG and
+            CONF.logging_debug_format_suffix):
+            self._fmt += " " + CONF.logging_debug_format_suffix
+
+        # Cache this on the record, Logger will respect our formated copy
+        if record.exc_info:
+            record.exc_text = self.formatException(record.exc_info, record)
+        return logging.Formatter.format(self, record)
+
+    def formatException(self, exc_info, record=None):
+        """Format exception output with CONF.logging_exception_prefix."""
+        if not record:
+            return logging.Formatter.formatException(self, exc_info)
+
+        stringbuffer = cStringIO.StringIO()
+        traceback.print_exception(exc_info[0], exc_info[1], exc_info[2],
+                                  None, stringbuffer)
+        lines = stringbuffer.getvalue().split('\n')
+        stringbuffer.close()
+
+        if CONF.logging_exception_prefix.find('%(asctime)') != -1:
+            record.asctime = self.formatTime(record, self.datefmt)
+
+        formatted_lines = []
+        for line in lines:
+            pl = CONF.logging_exception_prefix % record.__dict__
+            fl = '%s%s' % (pl, line)
+            formatted_lines.append(fl)
+        return '\n'.join(formatted_lines)
+
+
+class ColorHandler(logging.StreamHandler):
+    LEVEL_COLORS = {
+        logging.DEBUG: '\033[00;32m',  # GREEN
+        logging.INFO: '\033[00;36m',  # CYAN
+        logging.AUDIT: '\033[01;36m',  # BOLD CYAN
+        logging.WARN: '\033[01;33m',  # BOLD YELLOW
+        logging.ERROR: '\033[01;31m',  # BOLD RED
+        logging.CRITICAL: '\033[01;31m',  # BOLD RED
+    }
+
+    def format(self, record):
+        record.color = self.LEVEL_COLORS[record.levelno]
+        return logging.StreamHandler.format(self, record)
index ff56cbd934e71a94e79efda9ff557a85e392e19e..87bd70d1d2894e3cfe71af7dbd67c3f455ed70c0 100644 (file)
@@ -52,7 +52,7 @@ zmq_opts = [
         default=('cinder.openstack.common.rpc.'
                  'matchmaker.MatchMakerLocalhost'),
         help='MatchMaker driver',
-        ),
+    ),
 
     # The following port is unassigned by IANA as of 2012-05-21
     cfg.IntOpt('rpc_zmq_port', default=9501,
index ebf465e39c954cfa8f0fbd18fae82ff9d596edab..02be89339b22d54ffb0892929f063b2c43e52afa 100644 (file)
@@ -23,7 +23,7 @@ Scheduler base class that all Schedulers should inherit from
 
 from cinder import db
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import importutils
 from cinder.openstack.common import rpc
index 6f84c4f1ca13dbc69d6b787db021b611fcc2283d..cf190da3c1be57c6b7fd2933b800478346834830 100644 (file)
@@ -26,7 +26,7 @@ import functools
 from cinder import db
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import manager
 from cinder.notifier import api as notifier
 from cinder.openstack.common import cfg
index 0320e7c8fb346bab4955b53605e51c2c08aca461..d04409e5cb11144c7a6160ef9ae530a2d0018b2a 100644 (file)
@@ -31,7 +31,7 @@ from cinder import context
 from cinder import db
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import importutils
 from cinder.openstack.common import rpc
index 8f406463650b85f58058dd3673758081fc44d665..63f10970d653421b881a3b6966f6b9809e78ebe7 100644 (file)
@@ -34,7 +34,7 @@ import nose.plugins.skip
 import stubout
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import timeutils
 from cinder import utils
index 77b7701ad6bcabf6728b31fde92aceb5b38f3050..4711d0ce9c55b6ff73a8d6db7ee2c5d2092f4dab 100644 (file)
@@ -74,7 +74,7 @@ absdir = os.path.abspath(reldir)
 sys.path.insert(0, absdir)
 
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 
 
@@ -345,7 +345,7 @@ def run():
     # arbitrary nosetest flags as well
     argv = [x for x in sys.argv if x != '--hide-elapsed']
     hide_elapsed = argv != sys.argv
-    logging.setup()
+    logging.setup("cinder")
 
     # If any argument looks like a test name but doesn't have "cinder.tests" in
     # front of it, automatically add that so we don't have to type as much
index f7e7afb6c91f6e91ea8424b00bb7da6806c3c9cd..8ba9a0fe794059640c8cb31fed4f0db651816bf2 100644 (file)
@@ -20,7 +20,7 @@ from cinder.api.openstack.volume import volumes
 from cinder.api.openstack.volume import versions
 from cinder.api.openstack import wsgi
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import test
 from cinder.tests.api.openstack import fakes
 
index bc60e289a7eb6c2df6aba34b74eafae6cc637f61..7dcdb023982b327c065a10f465bbb6ef9b1cd0cb 100644 (file)
@@ -21,7 +21,7 @@ import webob
 from cinder.api.openstack.volume import snapshots
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import test
 from cinder import volume
 from cinder.tests.api.openstack import fakes
index 02f0e14cadc099413dfd89ddfececf9d7e28c794..68aaf79646fe965e101983e8b3cf0dfbd790e2e3 100644 (file)
@@ -21,7 +21,7 @@ import re
 from eventlet import greenthread
 
 from cinder import exception
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import utils
 
 LOG = logging.getLogger(__name__)
index fbd899012ff746ed2a78fa1a802e336356d7001c..1fcd70796ad0150f697640d7a0aa4c83ab5feb14 100644 (file)
@@ -18,7 +18,7 @@ import httplib
 import urllib
 import urlparse
 
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import jsonutils
 
 
index 4b243efc13ff477b0711726e0842262e868286f1..72f4e690d43e9ec45457f36f41651d54bf5fbfca 100644 (file)
@@ -22,7 +22,7 @@ Provides common functionality for integrated unit tests
 import random
 import string
 
-from cinder.log import logging
+from cinder.openstack.common import log as logging
 from cinder import service
 from cinder import test  # For the flags
 from cinder.tests.integrated.api import client
index bcb921d83445232259db8f59c4591d0dfdb8c0ef..6423885ae72dcece3b71e6fd3ad08994fceb4a58 100644 (file)
@@ -17,7 +17,7 @@
 
 from cinder.api.openstack.volume import extensions
 from cinder import flags
-from cinder.log import logging
+from cinder.openstack.common import log as logging
 from cinder.tests.integrated import integrated_helpers
 
 
index cd9fb7a1673913e2f6d98ce07cc523acdca63eeb..9c1515de82808b986cf37f830e1557b7003d64c8 100644 (file)
@@ -16,7 +16,7 @@
 #    under the License.
 
 
-from cinder.log import logging
+from cinder.openstack.common import log as logging
 from cinder.tests.integrated import integrated_helpers
 
 
index f94d85604da7d2cfeef6985bc8fe077ba3ec18e0..f3252c7dcdee4cc830640911d5dee4216943d4dd 100644 (file)
@@ -19,7 +19,7 @@ import unittest
 import time
 
 from cinder import service
-from cinder.log import logging
+from cinder.openstack.common import log as logging
 from cinder.tests.integrated import integrated_helpers
 from cinder.tests.integrated.api import client
 from cinder.volume import driver
index 1277b80aabeaa07fa6e10d73d633fe7d0b0a54f9..cbbfe9a115eb4a32e00cd22cbb4afeae2383e010 100644 (file)
@@ -17,7 +17,7 @@
 
 from lxml import etree
 
-from cinder.log import logging
+from cinder.openstack.common import log as logging
 from cinder.tests.integrated import integrated_helpers
 from cinder.api.openstack import common
 from cinder.api.openstack import xmlutil
index 83e380764aca4adc7cc707063963936cbf80ee96..83d5b16c458afda3121c01a1d9de0a0875920733 100644 (file)
@@ -14,7 +14,7 @@
 #    under the License.
 
 import cinder
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 import cinder.notifier.api
 import cinder.notifier.log_notifier
 import cinder.notifier.no_op_notifier
index 083383c341fc53049aceedea9fbea82f0da337ba..5bde6032be05df4e8f6301c24e8f045ff5892756 100644 (file)
@@ -12,7 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 from cinder import exception
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import test
 from cinder.volume import san
 
index 4a1a60121008011bb8afe8dfe8848e0d6b4989fc..0febe787b721bf0604af4aa88480e1c104497f86 100644 (file)
@@ -16,7 +16,7 @@
 #    under the License.
 
 from cinder import exception
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.volume import san
 from cinder import test
 
diff --git a/cinder/tests/test_log.py b/cinder/tests/test_log.py
deleted file mode 100644 (file)
index f6e34ea..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-import cStringIO
-import logging
-
-from cinder import context
-from cinder import flags
-from cinder import log
-from cinder.openstack.common import jsonutils
-from cinder.notifier import api as notifier
-from cinder import test
-
-FLAGS = flags.FLAGS
-flags.DECLARE('list_notifier_drivers',
-              'cinder.notifier.list_notifier')
-
-
-def _fake_context():
-    return context.RequestContext(1, 1)
-
-
-class LoggerTestCase(test.TestCase):
-    def setUp(self):
-        super(LoggerTestCase, self).setUp()
-        self.log = log.getLogger()
-
-    def test_handlers_have_cinder_formatter(self):
-        formatters = []
-        for h in self.log.logger.handlers:
-            f = h.formatter
-            if isinstance(f, log.LegacyCinderFormatter):
-                formatters.append(f)
-        self.assert_(formatters)
-        self.assertEqual(len(formatters), len(self.log.logger.handlers))
-
-    def test_handles_context_kwarg(self):
-        self.log.info("foo", context=_fake_context())
-        self.assert_(True)  # didn't raise exception
-
-    def test_audit_handles_context_arg(self):
-        self.log.audit("foo", context=_fake_context())
-        self.assert_(True)  # didn't raise exception
-
-    def test_will_be_verbose_if_verbose_flag_set(self):
-        self.flags(verbose=True)
-        log.setup()
-        self.assertEqual(logging.DEBUG, self.log.logger.getEffectiveLevel())
-
-    def test_will_not_be_verbose_if_verbose_flag_not_set(self):
-        self.flags(verbose=False)
-        log.setup()
-        self.assertEqual(logging.INFO, self.log.logger.getEffectiveLevel())
-
-    def test_no_logging_via_module(self):
-        for func in ('critical', 'error', 'exception', 'warning', 'warn',
-                     'info', 'debug', 'log', 'audit'):
-            self.assertRaises(AttributeError, getattr, log, func)
-
-
-class LogHandlerTestCase(test.TestCase):
-    def test_log_path_logdir(self):
-        self.flags(logdir='/some/path', logfile=None)
-        self.assertEquals(log._get_log_file_path(binary='foo-bar'),
-                         '/some/path/foo-bar.log')
-
-    def test_log_path_logfile(self):
-        self.flags(logfile='/some/path/foo-bar.log')
-        self.assertEquals(log._get_log_file_path(binary='foo-bar'),
-                         '/some/path/foo-bar.log')
-
-    def test_log_path_none(self):
-        self.flags(logdir=None, logfile=None)
-        self.assertTrue(log._get_log_file_path(binary='foo-bar') is None)
-
-    def test_log_path_logfile_overrides_logdir(self):
-        self.flags(logdir='/some/other/path',
-                   logfile='/some/path/foo-bar.log')
-        self.assertEquals(log._get_log_file_path(binary='foo-bar'),
-                         '/some/path/foo-bar.log')
-
-
-class PublishErrorsHandlerTestCase(test.TestCase):
-    """Tests for cinder.log.PublishErrorsHandler"""
-    def setUp(self):
-        super(PublishErrorsHandlerTestCase, self).setUp()
-        self.publiserrorshandler = log.PublishErrorsHandler(logging.ERROR)
-
-    def test_emit_cfg_list_notifier_drivers_in_flags(self):
-        self.stub_flg = False
-
-        def fake_notifier(*args, **kwargs):
-            self.stub_flg = True
-
-        self.stubs.Set(notifier, 'notify', fake_notifier)
-        logrecord = logging.LogRecord('name', 'WARN', '/tmp', 1,
-                                      'Message', None, None)
-        self.publiserrorshandler.emit(logrecord)
-        self.assertTrue(self.stub_flg)
-
-    def test_emit_cfg_log_notifier_in_list_notifier_drivers(self):
-        self.flags(list_notifier_drivers=['cinder.notifier.rabbit_notifier',
-                                          'cinder.notifier.log_notifier'])
-        self.stub_flg = True
-
-        def fake_notifier(*args, **kwargs):
-            self.stub_flg = False
-
-        self.stubs.Set(notifier, 'notify', fake_notifier)
-        logrecord = logging.LogRecord('name', 'WARN', '/tmp', 1,
-                                      'Message', None, None)
-        self.publiserrorshandler.emit(logrecord)
-        self.assertTrue(self.stub_flg)
-
-
-class CinderFormatterTestCase(test.TestCase):
-    def setUp(self):
-        super(CinderFormatterTestCase, self).setUp()
-        self.flags(logging_context_format_string="HAS CONTEXT "
-                                                 "[%(request_id)s]: "
-                                                 "%(message)s",
-                   logging_default_format_string="NOCTXT: %(message)s",
-                   logging_debug_format_suffix="--DBG")
-        self.log = log.getLogger()
-        self.stream = cStringIO.StringIO()
-        self.handler = logging.StreamHandler(self.stream)
-        self.handler.setFormatter(log.LegacyCinderFormatter())
-        self.log.logger.addHandler(self.handler)
-        self.level = self.log.logger.getEffectiveLevel()
-        self.log.logger.setLevel(logging.DEBUG)
-
-    def tearDown(self):
-        self.log.logger.setLevel(self.level)
-        self.log.logger.removeHandler(self.handler)
-        super(CinderFormatterTestCase, self).tearDown()
-
-    def test_uncontextualized_log(self):
-        self.log.info("foo")
-        self.assertEqual("NOCTXT: foo\n", self.stream.getvalue())
-
-    def test_contextualized_log(self):
-        ctxt = _fake_context()
-        self.log.info("bar", context=ctxt)
-        expected = "HAS CONTEXT [%s]: bar\n" % ctxt.request_id
-        self.assertEqual(expected, self.stream.getvalue())
-
-    def test_debugging_log(self):
-        self.log.debug("baz")
-        self.assertEqual("NOCTXT: baz --DBG\n", self.stream.getvalue())
-
-
-class CinderLoggerTestCase(test.TestCase):
-    def setUp(self):
-        super(CinderLoggerTestCase, self).setUp()
-        levels = FLAGS.default_log_levels
-        levels.append("cinder-test=AUDIT")
-        self.flags(default_log_levels=levels,
-                   verbose=True)
-        log.setup()
-        self.log = log.getLogger('cinder-test')
-
-    def test_has_level_from_flags(self):
-        self.assertEqual(logging.AUDIT, self.log.logger.getEffectiveLevel())
-
-    def test_child_log_has_level_of_parent_flag(self):
-        l = log.getLogger('cinder-test.foo')
-        self.assertEqual(logging.AUDIT, l.logger.getEffectiveLevel())
-
-
-class JSONFormatterTestCase(test.TestCase):
-    def setUp(self):
-        super(JSONFormatterTestCase, self).setUp()
-        self.log = log.getLogger('test-json')
-        self.stream = cStringIO.StringIO()
-        handler = logging.StreamHandler(self.stream)
-        handler.setFormatter(log.JSONFormatter())
-        self.log.logger.addHandler(handler)
-        self.log.logger.setLevel(logging.DEBUG)
-
-    def test_json(self):
-        test_msg = 'This is a %(test)s line'
-        test_data = {'test': 'log'}
-        self.log.debug(test_msg, test_data)
-
-        data = jsonutils.loads(self.stream.getvalue())
-        self.assertTrue(data)
-        self.assertTrue('extra' in data)
-        self.assertEqual('test-json', data['name'])
-
-        self.assertEqual(test_msg % test_data, data['message'])
-        self.assertEqual(test_msg, data['msg'])
-        self.assertEqual(test_data, data['args'])
-
-        self.assertEqual('test_log.py', data['filename'])
-        self.assertEqual('test_json', data['funcname'])
-
-        self.assertEqual('DEBUG', data['levelname'])
-        self.assertEqual(logging.DEBUG, data['levelno'])
-        self.assertFalse(data['traceback'])
-
-    def test_json_exception(self):
-        test_msg = 'This is %s'
-        test_data = 'exceptional'
-        try:
-            raise Exception('This is exceptional')
-        except Exception:
-            self.log.exception(test_msg, test_data)
-
-        data = jsonutils.loads(self.stream.getvalue())
-        self.assertTrue(data)
-        self.assertTrue('extra' in data)
-        self.assertEqual('test-json', data['name'])
-
-        self.assertEqual(test_msg % test_data, data['message'])
-        self.assertEqual(test_msg, data['msg'])
-        self.assertEqual([test_data], data['args'])
-
-        self.assertEqual('ERROR', data['levelname'])
-        self.assertEqual(logging.ERROR, data['levelno'])
-        self.assertTrue(data['traceback'])
index efe6777db6f3c9119b9ba787ff347fd7bde72c3f..00502f76deb457d3d7185c23be9b09248f9ec9bd 100644 (file)
@@ -36,7 +36,7 @@ import sqlalchemy
 import cinder.db.sqlalchemy.migrate_repo
 import cinder.db.migration as migration
 from cinder.db.sqlalchemy.migration import versioning_api as migration_api
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import test
 
 LOG = logging.getLogger('cinder.tests.test_migrations')
index 179e46b8b33cc27360a9bf64bf6572a3ef5dc4e0..8c0d63aca138e691d291a1b9be8bc6884f44ca64 100644 (file)
@@ -25,7 +25,7 @@ import StringIO
 
 from lxml import etree
 
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import test
 from cinder.volume import netapp
 
index e341121b40d695176e5888152a40a209d373d221..f4291044da8f8971cf63ecdeb875502ab10ef460 100644 (file)
@@ -15,7 +15,7 @@
 
 import cinder
 from cinder import flags
-from cinder import log
+from cinder.openstack.common import log as logging
 import cinder.notifier.no_op_notifier
 from cinder.notifier import api as notifier_api
 from cinder import test
@@ -98,8 +98,8 @@ class NotifierTestCase(test.TestCase):
         self.stubs.Set(cinder.flags.FLAGS, 'notification_driver',
             'cinder.notifier.rabbit_notifier')
         self.stubs.Set(cinder.flags.FLAGS, 'publish_errors', True)
-        LOG = log.getLogger('cinder')
-        log.setup()
+        LOG = logging.getLogger('cinder')
+        logging.setup("cinder")
         msgs = []
 
         def mock_notify(context, topic, data):
index 48fe81d395120442bbf04bbc92a202ab4b35df46..065272382134527ea238ab248437415e2a4231ce 100644 (file)
@@ -21,6 +21,7 @@ Tests for Volume Code.
 """
 
 import cStringIO
+import logging
 
 import mox
 
@@ -28,7 +29,7 @@ from cinder import context
 from cinder import exception
 from cinder import db
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as os_logging
 from cinder.openstack.common import importutils
 from cinder.openstack.common import rpc
 import cinder.policy
@@ -36,7 +37,7 @@ from cinder import test
 import cinder.volume.api
 
 FLAGS = flags.FLAGS
-LOG = logging.getLogger(__name__)
+LOG = os_logging.getLogger(__name__)
 
 
 class VolumeTestCase(test.TestCase):
@@ -354,7 +355,7 @@ class DriverTestCase(test.TestCase):
 
         log = logging.getLogger()
         self.stream = cStringIO.StringIO()
-        log.logger.addHandler(logging.logging.StreamHandler(self.stream))
+        log.addHandler(logging.StreamHandler(self.stream))
 
     def _attach_volume(self):
         """Attach volumes to an instance. This function also sets
index 494bd0c996498950846f8aab9a318af328d0313c..f0f6f1821a4f374149fed716842af90da055eb13 100644 (file)
@@ -21,7 +21,7 @@ import time
 from cinder import context
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import test
 from cinder.volume import volume_types
 from cinder.db.sqlalchemy import session as sql_session
index c09a310c177a0d9a026b9887bd7978dc92014b00..fbe29efb0eafea64be0a831fcbe9871a457df12c 100644 (file)
@@ -50,7 +50,7 @@ import netaddr
 
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import excutils
 from cinder.openstack.common import importutils
index 699952223aa20f0c941ca587a6b8b79ed26018e1..714451c98fe94e1e34f0e2d57b8cabd20956525a 100644 (file)
@@ -26,7 +26,7 @@ from eventlet import greenthread
 
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import rpc
 import cinder.policy
 from cinder.openstack.common import timeutils
index c1b2229b26f845a8bee989833fe60535081dc45e..8c0bf125698c13e81cd5ab716612d4245c6664f6 100644 (file)
@@ -24,7 +24,7 @@ import time
 
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder import utils
 from cinder.volume import iscsi
index 5d8901d9433de7a977799dcb761e01b573c5e235..dfd0464615e32514e32397fd98d96691fe85be6d 100644 (file)
@@ -41,7 +41,7 @@ intact.
 from cinder import context
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import manager
 from cinder.openstack.common import cfg
 from cinder.openstack.common import excutils
index 17f2f24f2b473bb5af6856d3a4190ee4c23b28f8..31da652c2006d0faa42aad7415fc308ff3fb8fa3 100644 (file)
@@ -32,7 +32,7 @@ from suds.sax import text
 
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.volume import driver
 
index 7e30d94eb8a2fa4e5672b7d0fdf52baa513529b2..2853303c42944020b00ec2f5e5ca9ff381f5126a 100644 (file)
@@ -26,7 +26,7 @@ import urllib2
 
 from cinder.openstack.common import jsonutils
 from cinder.volume import nexenta
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 LOG = logging.getLogger("cinder.volume.nexenta.jsonrpc")
 
index ad3b4e3c15ac21b3443140b3ac1e869fa63b13b2..9bac207ec8b57e705000f869319f18989fd845c7 100644 (file)
@@ -24,7 +24,7 @@
 
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.volume import driver
 from cinder.volume import nexenta
index d57e8675e720e4eda068b0be38c1b39fd6858b7a..8df612caf4936ae0db8ae18b36d8b11c5bb9c9e9 100644 (file)
@@ -34,7 +34,7 @@ from lxml import etree
 
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder.openstack.common import cfg
 from cinder.openstack.common import jsonutils
 from cinder import utils
index 5df9e6e60b4a53a1dc8f9f757693f4bb4d9d92c9..3c8bb826434025bd1ab1d791b453b8550ee1df43 100644 (file)
@@ -25,7 +25,7 @@ from cinder import context
 from cinder import db
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 
 FLAGS = flags.FLAGS
 LOG = logging.getLogger(__name__)
index ad21afe0e091959be179922027259b300d5ca455..d9860f65905fe7529a6974ff2b147aa7539bbcfc 100644 (file)
@@ -14,7 +14,7 @@
 
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import utils
 from cinder.virt.xenapi import connection as xenapi_conn
 from cinder.virt.xenapi import volumeops
index 0bf63f9eeb760dbeb87ffe04f0c62cf7a29b6984..222efcad94fab0b05732283dae5db8b1a25c089a 100644 (file)
@@ -31,7 +31,7 @@ import webob.exc
 
 from cinder import exception
 from cinder import flags
-from cinder import log as logging
+from cinder.openstack.common import log as logging
 from cinder import utils
 
 
index 476425b8b52f2b51bdf51887b71e85afd83d9b87..13c3ab325f18db761d32813bdd9d8696df5f9ff8 100644 (file)
@@ -65,12 +65,12 @@ args = ('/dev/log', handlers.SysLogHandler.LOG_USER)
 formatter = legacycinder
 
 [handler_null]
-class = cinder.log.NullHandler
+class = cinder.common.openstack.NullHandler
 formatter = default
 args = ()
 
 [formatter_legacycinder]
-class = cinder.log.LegacyCinderFormatter
+class = cinder.common.openstack.LegacyCinderFormatter
 
 [formatter_default]
 format = %(message)s
index 7fa5da7025dfad66388c48ca11d1aead6c7c12db..63d619ce5379afe2ef0a27686c1aa7629f8f04e0 100644 (file)
@@ -1,7 +1,7 @@
 [DEFAULT]
 
 # The list of modules to copy from openstack-common
-modules=cfg,exception,excutils,gettextutils,importutils,iniparser,jsonutils,local,rpc,timeutils
+modules=cfg,exception,excutils,gettextutils,importutils,iniparser,jsonutils,local,rpc,timeutils,log
 
 # The base module to hold the copy of openstack.common
 base=cinder