diff --git a/mistral/actions/base.py b/mistral/actions/base.py index 88b4e88a..7d053538 100644 --- a/mistral/actions/base.py +++ b/mistral/actions/base.py @@ -16,7 +16,7 @@ import abc -from mistral.openstack.common import log as logging +from oslo_log import log as logging LOG = logging.getLogger(__name__) diff --git a/mistral/actions/openstack/action_generator/base.py b/mistral/actions/openstack/action_generator/base.py index c404191b..5dfbe418 100644 --- a/mistral/actions/openstack/action_generator/base.py +++ b/mistral/actions/openstack/action_generator/base.py @@ -15,10 +15,10 @@ import json from oslo.config import cfg +from oslo_log import log as logging import pkg_resources as pkg from mistral.actions import action_generator -from mistral.openstack.common import log as logging from mistral.utils import inspect_utils as i_u from mistral import version diff --git a/mistral/actions/openstack/actions.py b/mistral/actions/openstack/actions.py index 9165932a..7a8faf65 100644 --- a/mistral/actions/openstack/actions.py +++ b/mistral/actions/openstack/actions.py @@ -22,11 +22,11 @@ from keystoneclient.v3 import client as keystoneclient from neutronclient.v2_0 import client as neutronclient from novaclient.v2 import client as novaclient from oslo.config import cfg +from oslo_log import log from mistral.actions.openstack import base from mistral import context from mistral import exceptions as exc -from mistral.openstack.common import log from mistral.utils.openstack import keystone as keystone_utils diff --git a/mistral/actions/std_actions.py b/mistral/actions/std_actions.py index 34aed227..8708156a 100644 --- a/mistral/actions/std_actions.py +++ b/mistral/actions/std_actions.py @@ -20,9 +20,10 @@ import json import requests import smtplib +from oslo_log import log as logging + from mistral.actions import base from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.utils import javascript from mistral.utils import ssh_utils diff --git a/mistral/api/controllers/root.py b/mistral/api/controllers/root.py index 57cfee96..0e9c1fd5 100644 --- a/mistral/api/controllers/root.py +++ b/mistral/api/controllers/root.py @@ -14,13 +14,13 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging import pecan from wsme import types as wtypes import wsmeext.pecan as wsme_pecan from mistral.api.controllers import resource from mistral.api.controllers.v2 import root as v2_root -from mistral.openstack.common import log as logging LOG = logging.getLogger(__name__) diff --git a/mistral/api/controllers/v2/action.py b/mistral/api/controllers/v2/action.py index 723b3ccb..fddfc52a 100644 --- a/mistral/api/controllers/v2/action.py +++ b/mistral/api/controllers/v2/action.py @@ -14,6 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging import pecan from pecan import hooks from pecan import rest @@ -24,7 +25,6 @@ from mistral.api.controllers import resource from mistral.api.hooks import content_type as ct_hook from mistral.db.v2 import api as db_api from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import actions from mistral.utils import rest_utils diff --git a/mistral/api/controllers/v2/action_execution.py b/mistral/api/controllers/v2/action_execution.py index 2604fb6c..2270017d 100644 --- a/mistral/api/controllers/v2/action_execution.py +++ b/mistral/api/controllers/v2/action_execution.py @@ -16,6 +16,7 @@ import json +from oslo_log import log as logging from pecan import rest from wsme import types as wtypes import wsmeext.pecan as wsme_pecan @@ -24,7 +25,6 @@ from mistral.api.controllers import resource from mistral.db.v2 import api as db_api from mistral.engine import rpc from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.utils import rest_utils from mistral.workflow import states from mistral.workflow import utils as wf_utils diff --git a/mistral/api/controllers/v2/cron_trigger.py b/mistral/api/controllers/v2/cron_trigger.py index 7a54af7d..d7c673bf 100644 --- a/mistral/api/controllers/v2/cron_trigger.py +++ b/mistral/api/controllers/v2/cron_trigger.py @@ -13,13 +13,14 @@ # limitations under the License. import json + +from oslo_log import log as logging from pecan import rest from wsme import types as wtypes import wsmeext.pecan as wsme_pecan from mistral.api.controllers import resource from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import triggers from mistral.utils import rest_utils diff --git a/mistral/api/controllers/v2/environment.py b/mistral/api/controllers/v2/environment.py index 0cda3669..cf7c529a 100644 --- a/mistral/api/controllers/v2/environment.py +++ b/mistral/api/controllers/v2/environment.py @@ -15,6 +15,7 @@ import json import uuid +from oslo_log import log as logging from pecan import rest import six from wsme import types as wtypes @@ -23,7 +24,6 @@ import wsmeext.pecan as wsme_pecan from mistral.api.controllers import resource from mistral.db.v2 import api as db_api from mistral import exceptions as exceptions -from mistral.openstack.common import log as logging from mistral.utils import rest_utils diff --git a/mistral/api/controllers/v2/execution.py b/mistral/api/controllers/v2/execution.py index a4288c1b..a3acd5db 100644 --- a/mistral/api/controllers/v2/execution.py +++ b/mistral/api/controllers/v2/execution.py @@ -14,6 +14,7 @@ # limitations under the License. import json +from oslo_log import log as logging from pecan import rest from wsme import types as wtypes import wsmeext.pecan as wsme_pecan @@ -23,7 +24,6 @@ from mistral.api.controllers.v2 import task from mistral.db.v2 import api as db_api from mistral.engine import rpc from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.utils import rest_utils from mistral.workflow import states diff --git a/mistral/api/controllers/v2/task.py b/mistral/api/controllers/v2/task.py index 2e35011e..5df97bda 100644 --- a/mistral/api/controllers/v2/task.py +++ b/mistral/api/controllers/v2/task.py @@ -16,6 +16,7 @@ import json +from oslo_log import log as logging from pecan import rest from wsme import types as wtypes import wsmeext.pecan as wsme_pecan @@ -23,7 +24,6 @@ import wsmeext.pecan as wsme_pecan from mistral.api.controllers import resource from mistral.api.controllers.v2 import action_execution from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.utils import rest_utils from mistral.workflow import data_flow from mistral.workflow import states diff --git a/mistral/api/controllers/v2/validation.py b/mistral/api/controllers/v2/validation.py index 7622e22d..380aa099 100644 --- a/mistral/api/controllers/v2/validation.py +++ b/mistral/api/controllers/v2/validation.py @@ -12,11 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging import pecan from pecan import rest from mistral import exceptions as exc -from mistral.openstack.common import log as logging LOG = logging.getLogger(__name__) diff --git a/mistral/api/controllers/v2/workbook.py b/mistral/api/controllers/v2/workbook.py index 7ca81428..ef299010 100644 --- a/mistral/api/controllers/v2/workbook.py +++ b/mistral/api/controllers/v2/workbook.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging import pecan from pecan import hooks from pecan import rest @@ -23,7 +24,6 @@ from mistral.api.controllers import resource from mistral.api.controllers.v2 import validation from mistral.api.hooks import content_type as ct_hook from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workbooks from mistral.utils import rest_utils from mistral.workbook import parser as spec_parser diff --git a/mistral/api/controllers/v2/workflow.py b/mistral/api/controllers/v2/workflow.py index 54b2ec50..e25533e3 100644 --- a/mistral/api/controllers/v2/workflow.py +++ b/mistral/api/controllers/v2/workflow.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging import pecan from pecan import hooks from pecan import rest @@ -23,7 +24,6 @@ from mistral.api.controllers import resource from mistral.api.controllers.v2 import validation from mistral.api.hooks import content_type as ct_hook from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workflows from mistral.utils import rest_utils from mistral.workbook import parser as spec_parser diff --git a/mistral/cmd/launch.py b/mistral/cmd/launch.py index bc1956eb..ec26a4c4 100755 --- a/mistral/cmd/launch.py +++ b/mistral/cmd/launch.py @@ -36,6 +36,7 @@ if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'mistral', '__init__.py')): from oslo.config import cfg from oslo import messaging +from oslo_log import log as logging from wsgiref import simple_server from mistral.api import app @@ -45,11 +46,11 @@ from mistral.db.v2 import api as db_api from mistral.engine import default_engine as def_eng from mistral.engine import default_executor as def_executor from mistral.engine import rpc -from mistral.openstack.common import log as logging from mistral.services import scheduler from mistral import version +CONF = cfg.CONF LOG = logging.getLogger(__name__) @@ -183,7 +184,7 @@ def main(): print_server_info() - logging.setup('Mistral') + logging.setup(CONF, 'Mistral') # Please refer to the oslo.messaging documentation for transport # configuration. The default transport for oslo.messaging is diff --git a/mistral/config.py b/mistral/config.py index f009fcfd..8c60064d 100644 --- a/mistral/config.py +++ b/mistral/config.py @@ -21,8 +21,8 @@ Configuration options registration and useful routines. import itertools from oslo.config import cfg +from oslo_log import log -from mistral.openstack.common import log from mistral import version @@ -113,23 +113,7 @@ CLI_OPTS = [ CONF.register_cli_opts(CLI_OPTS) -CONF.import_opt('verbose', 'mistral.openstack.common.log') -CONF.set_default('verbose', True) -CONF.import_opt('debug', 'mistral.openstack.common.log') -CONF.import_opt('log_dir', 'mistral.openstack.common.log') -CONF.import_opt('log_file', 'mistral.openstack.common.log') -CONF.import_opt('log_config_append', 'mistral.openstack.common.log') -CONF.import_opt('log_format', 'mistral.openstack.common.log') -CONF.import_opt('log_date_format', 'mistral.openstack.common.log') -CONF.import_opt('use_syslog', 'mistral.openstack.common.log') -CONF.import_opt('syslog_log_facility', 'mistral.openstack.common.log') - -# Extend oslo default_log_levels to include some that are useful for mistral -# some are in oslo logging already, this is just making sure it stays this -# way. -default_log_levels = cfg.CONF.default_log_levels - -logs_to_quieten = [ +_DEFAULT_LOG_LEVELS = [ 'sqlalchemy=WARN', 'oslo.messaging=INFO', 'iso8601=WARN', @@ -140,15 +124,6 @@ logs_to_quieten = [ 'mistral.services.periodic=INFO' ] -for chatty in logs_to_quieten: - if chatty not in default_log_levels: - default_log_levels.append(chatty) - -cfg.set_defaults( - log.log_opts, - default_log_levels=default_log_levels -) - def list_opts(): return [ @@ -164,6 +139,8 @@ def list_opts(): def parse_args(args=None, usage=None, default_config_files=None): + log.set_defaults(default_log_levels=_DEFAULT_LOG_LEVELS) + log.register_options(CONF) CONF( args=args, project='mistral', diff --git a/mistral/db/sqlalchemy/base.py b/mistral/db/sqlalchemy/base.py index 85aad7a8..b2a94a5c 100644 --- a/mistral/db/sqlalchemy/base.py +++ b/mistral/db/sqlalchemy/base.py @@ -17,10 +17,10 @@ from oslo.config import cfg from oslo.db import options from oslo.db.sqlalchemy import session as db_session +from oslo_log import log as logging from mistral.db.sqlalchemy import sqlite_lock from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral import utils diff --git a/mistral/db/v2/api.py b/mistral/db/v2/api.py index 90a29077..dacc2df4 100644 --- a/mistral/db/v2/api.py +++ b/mistral/db/v2/api.py @@ -16,8 +16,7 @@ import contextlib from oslo.db import api as db_api - -from mistral.openstack.common import log as logging +from oslo_log import log as logging _BACKEND_MAPPING = { 'sqlalchemy': 'mistral.db.v2.sqlalchemy.api', diff --git a/mistral/db/v2/sqlalchemy/api.py b/mistral/db/v2/sqlalchemy/api.py index 6dded113..513d846d 100644 --- a/mistral/db/v2/sqlalchemy/api.py +++ b/mistral/db/v2/sqlalchemy/api.py @@ -19,6 +19,7 @@ import sys from oslo.config import cfg from oslo.db import exception as db_exc from oslo.utils import timeutils +from oslo_log import log as logging import sqlalchemy as sa from mistral.db.sqlalchemy import base as b @@ -26,7 +27,6 @@ from mistral.db.sqlalchemy import model_base as mb from mistral.db.sqlalchemy import sqlite_lock from mistral.db.v2.sqlalchemy import models from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import security CONF = cfg.CONF diff --git a/mistral/engine/default_engine.py b/mistral/engine/default_engine.py index 0bf90df8..91217e81 100644 --- a/mistral/engine/default_engine.py +++ b/mistral/engine/default_engine.py @@ -16,13 +16,14 @@ import copy import traceback +from oslo_log import log as logging + from mistral.db.v2 import api as db_api from mistral.db.v2.sqlalchemy import models as db_models from mistral.engine import base from mistral.engine import task_handler from mistral.engine import utils as eng_utils from mistral.engine import workflow_handler as wf_handler -from mistral.openstack.common import log as logging from mistral import utils as u from mistral.utils import wf_trace from mistral.workbook import parser as spec_parser diff --git a/mistral/engine/default_executor.py b/mistral/engine/default_executor.py index 791c4e5d..3e00a216 100644 --- a/mistral/engine/default_executor.py +++ b/mistral/engine/default_executor.py @@ -13,11 +13,11 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging from mistral.actions import action_factory as a_f from mistral.engine import base from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.utils import inspect_utils as i_u from mistral.workflow import utils as wf_utils diff --git a/mistral/engine/rpc.py b/mistral/engine/rpc.py index 0ca2dfcb..c892389f 100644 --- a/mistral/engine/rpc.py +++ b/mistral/engine/rpc.py @@ -16,11 +16,11 @@ from oslo.config import cfg from oslo import messaging from oslo.messaging.rpc import client +from oslo_log import log as logging from mistral import context as auth_ctx from mistral.engine import base from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.workflow import utils as wf_utils LOG = logging.getLogger(__name__) diff --git a/mistral/engine/task_handler.py b/mistral/engine/task_handler.py index 333a0afb..a858e43c 100644 --- a/mistral/engine/task_handler.py +++ b/mistral/engine/task_handler.py @@ -14,13 +14,14 @@ import copy +from oslo_log import log as logging + from mistral.db.v2 import api as db_api from mistral.db.v2.sqlalchemy import models from mistral.engine import policies from mistral.engine import rpc from mistral.engine import utils as e_utils from mistral import expressions as expr -from mistral.openstack.common import log as logging from mistral.services import action_manager as a_m from mistral.services import scheduler from mistral import utils diff --git a/mistral/engine/utils.py b/mistral/engine/utils.py index e7888adc..c3c4fc65 100644 --- a/mistral/engine/utils.py +++ b/mistral/engine/utils.py @@ -16,10 +16,11 @@ import copy import six +from oslo_log import log as logging + from mistral.db.v2 import api as db_api from mistral import exceptions as exc from mistral import expressions as expr -from mistral.openstack.common import log as logging from mistral import utils from mistral.workbook import parser as spec_parser from mistral.workflow import utils as wf_utils diff --git a/mistral/expressions.py b/mistral/expressions.py index 6b5e6d51..fd20efa2 100644 --- a/mistral/expressions.py +++ b/mistral/expressions.py @@ -18,12 +18,12 @@ import copy import inspect import re +from oslo_log import log as logging import six import yaql from yaql import exceptions as yaql_exc from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral import yaql_utils diff --git a/mistral/openstack/common/fileutils.py b/mistral/openstack/common/fileutils.py index 30c11b60..f54fc620 100644 --- a/mistral/openstack/common/fileutils.py +++ b/mistral/openstack/common/fileutils.py @@ -15,11 +15,11 @@ import contextlib import errno +import logging import os import tempfile from mistral.openstack.common import excutils -from mistral.openstack.common import log as logging LOG = logging.getLogger(__name__) diff --git a/mistral/openstack/common/lockutils.py b/mistral/openstack/common/lockutils.py index 62a848de..fbae04c9 100644 --- a/mistral/openstack/common/lockutils.py +++ b/mistral/openstack/common/lockutils.py @@ -17,6 +17,7 @@ import contextlib import errno import fcntl import functools +import logging import os import shutil import subprocess @@ -30,7 +31,6 @@ from oslo.config import cfg from mistral.openstack.common import fileutils from mistral.openstack.common.gettextutils import _, _LE, _LI -from mistral.openstack.common import log as logging LOG = logging.getLogger(__name__) diff --git a/mistral/openstack/common/log.py b/mistral/openstack/common/log.py deleted file mode 100644 index 55aedc7f..00000000 --- a/mistral/openstack/common/log.py +++ /dev/null @@ -1,723 +0,0 @@ -# Copyright 2011 OpenStack Foundation. -# Copyright 2010 United States Government as represented by the -# Administrator of the National Aeronautics and Space Administration. -# All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -"""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 -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 conf. - -""" - -import inspect -import itertools -import logging -import logging.config -import logging.handlers -import os -import re -import sys -import traceback - -from oslo.config import cfg -import six -from six import moves - -from mistral.openstack.common.gettextutils import _ -from mistral.openstack.common import importutils -from mistral.openstack.common import jsonutils -from mistral.openstack.common import local - - -_DEFAULT_LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S" - -_SANITIZE_KEYS = ['adminPass', 'admin_pass', 'password', 'admin_password'] - -# NOTE(ldbragst): Let's build a list of regex objects using the list of -# _SANITIZE_KEYS we already have. This way, we only have to add the new key -# to the list of _SANITIZE_KEYS and we can generate regular expressions -# for XML and JSON automatically. -_SANITIZE_PATTERNS = [] -_FORMAT_PATTERNS = [r'(%(key)s\s*[=]\s*[\"\']).*?([\"\'])', - r'(<%(key)s>).*?()', - r'([\"\']%(key)s[\"\']\s*:\s*[\"\']).*?([\"\'])', - r'([\'"].*?%(key)s[\'"]\s*:\s*u?[\'"]).*?([\'"])', - r'([\'"].*?%(key)s[\'"]\s*,\s*\'--?[A-z]+\'\s*,\s*u?[\'"])' - '.*?([\'"])', - r'(%(key)s\s*--?[A-z]+\s*).*?([\s])'] - -for key in _SANITIZE_KEYS: - for pattern in _FORMAT_PATTERNS: - reg_ex = re.compile(pattern % {'key': key}, re.DOTALL) - _SANITIZE_PATTERNS.append(reg_ex) - - -common_cli_opts = [ - cfg.BoolOpt('debug', - short='d', - default=False, - help='Print debugging output (set logging level to ' - 'DEBUG instead of default WARNING level).'), - cfg.BoolOpt('verbose', - short='v', - default=False, - help='Print more verbose output (set logging level to ' - 'INFO instead of default WARNING level).'), -] - -logging_cli_opts = [ - cfg.StrOpt('log-config-append', - metavar='PATH', - deprecated_name='log-config', - help='The name of a logging configuration file. This file ' - 'is appended to any existing logging configuration ' - 'files. For details about logging configuration files, ' - 'see the Python logging module documentation.'), - cfg.StrOpt('log-format', - metavar='FORMAT', - help='DEPRECATED. ' - 'A logging.Formatter log message format string which may ' - 'use any of the available logging.LogRecord attributes. ' - 'This option is deprecated. Please use ' - 'logging_context_format_string and ' - 'logging_default_format_string instead.'), - cfg.StrOpt('log-date-format', - default=_DEFAULT_LOG_DATE_FORMAT, - metavar='DATE_FORMAT', - help='Format string for %%(asctime)s in log records. ' - 'Default: %(default)s .'), - cfg.StrOpt('log-file', - metavar='PATH', - deprecated_name='logfile', - help='(Optional) Name of log file to output to. ' - 'If no default is set, logging will go to stdout.'), - cfg.StrOpt('log-dir', - deprecated_name='logdir', - help='(Optional) The base directory used for relative ' - '--log-file paths.'), - cfg.BoolOpt('use-syslog', - default=False, - help='Use syslog for logging. ' - 'Existing syslog format is DEPRECATED during I, ' - 'and will change in J to honor RFC5424.'), - cfg.BoolOpt('use-syslog-rfc-format', - # TODO(bogdando) remove or use True after existing - # syslog format deprecation in J - default=False, - help='(Optional) Enables or disables syslog rfc5424 format ' - 'for logging. If enabled, prefixes the MSG part of the ' - 'syslog message with APP-NAME (RFC5424). The ' - 'format without the APP-NAME is deprecated in I, ' - 'and will be removed in J.'), - cfg.StrOpt('syslog-log-facility', - default='LOG_USER', - help='Syslog facility to receive log lines.') -] - -generic_log_opts = [ - cfg.BoolOpt('use_stderr', - default=True, - help='Log output to standard error.') -] - -log_opts = [ - cfg.StrOpt('logging_context_format_string', - default='%(asctime)s.%(msecs)03d %(process)d %(levelname)s ' - '%(name)s [%(request_id)s %(user_identity)s] ' - '%(instance)s%(message)s', - help='Format string to use for log messages with context.'), - cfg.StrOpt('logging_default_format_string', - default='%(asctime)s.%(msecs)03d %(process)d %(levelname)s ' - '%(name)s [-] %(instance)s%(message)s', - help='Format string to use for log messages without context.'), - cfg.StrOpt('logging_debug_format_suffix', - default='%(funcName)s %(pathname)s:%(lineno)d', - help='Data to append to log format when level is DEBUG.'), - cfg.StrOpt('logging_exception_prefix', - default='%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s ' - '%(instance)s', - help='Prefix each line of exception output with this format.'), - cfg.ListOpt('default_log_levels', - default=[ - 'amqp=WARN', - 'amqplib=WARN', - 'boto=WARN', - 'qpid=WARN', - 'sqlalchemy=WARN', - 'suds=INFO', - 'oslo.messaging=INFO', - 'iso8601=WARN', - 'requests.packages.urllib3.connectionpool=WARN' - ], - help='List of logger=LEVEL pairs.'), - cfg.BoolOpt('publish_errors', - default=False, - help='Enables or disables publication of error events.'), - cfg.BoolOpt('fatal_deprecations', - default=False, - help='Enables or disables fatal status of deprecations.'), - - # NOTE(mikal): there are two options here because sometimes we are handed - # a full instance (and could include more information), and other times we - # are just handed a UUID for the instance. - cfg.StrOpt('instance_format', - default='[instance: %(uuid)s] ', - help='The format for an instance that is passed with the log ' - 'message. '), - cfg.StrOpt('instance_uuid_format', - default='[instance: %(uuid)s] ', - help='The format for an instance UUID that is passed with the ' - 'log message. '), -] - -CONF = cfg.CONF -CONF.register_cli_opts(common_cli_opts) -CONF.register_cli_opts(logging_cli_opts) -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 -# module aware of it so it acts like other levels. -logging.AUDIT = logging.INFO + 1 -logging.addLevelName(logging.AUDIT, 'AUDIT') - - -try: - NullHandler = logging.NullHandler -except AttributeError: # NOTE(jkoelker) NullHandler added in Python 2.7 - class NullHandler(logging.Handler): - def handle(self, record): - pass - - def emit(self, record): - pass - - def createLock(self): - self.lock = None - - -def _dictify_context(context): - if context is None: - return None - if not isinstance(context, dict) and getattr(context, 'to_dict', None): - context = context.to_dict() - return context - - -def _get_binary_name(): - return os.path.basename(inspect.stack()[-1][1]) - - -def _get_log_file_path(binary=None): - logfile = CONF.log_file - logdir = CONF.log_dir - - if logfile and not logdir: - return logfile - - if logfile and logdir: - return os.path.join(logdir, logfile) - - if logdir: - binary = binary or _get_binary_name() - return '%s.log' % (os.path.join(logdir, binary),) - - return None - - -def mask_password(message, secret="***"): - """Replace password with 'secret' in message. - - :param message: The string which includes security information. - :param secret: value with which to replace passwords. - :returns: The unicode value of message with the password fields masked. - - For example: - - >>> mask_password("'adminPass' : 'aaaaa'") - "'adminPass' : '***'" - >>> mask_password("'admin_pass' : 'aaaaa'") - "'admin_pass' : '***'" - >>> mask_password('"password" : "aaaaa"') - '"password" : "***"' - >>> mask_password("'original_password' : 'aaaaa'") - "'original_password' : '***'" - >>> mask_password("u'original_password' : u'aaaaa'") - "u'original_password' : u'***'" - """ - message = six.text_type(message) - - # NOTE(ldbragst): Check to see if anything in message contains any key - # specified in _SANITIZE_KEYS, if not then just return the message since - # we don't have to mask any passwords. - if not any(key in message for key in _SANITIZE_KEYS): - return message - - secret = r'\g<1>' + secret + r'\g<2>' - for pattern in _SANITIZE_PATTERNS: - message = re.sub(pattern, secret, message) - return message - - -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): - self.logger = logger - self.project = project_name - self.version = version_string - self._deprecated_messages_sent = dict() - - @property - def handlers(self): - return self.logger.handlers - - def deprecated(self, msg, *args, **kwargs): - """Call this method when a deprecated feature is used. - - If the system is configured for fatal deprecations then the message - is logged at the 'critical' level and :class:`DeprecatedConfig` will - be raised. - - Otherwise, the message will be logged (once) at the 'warn' level. - - :raises: :class:`DeprecatedConfig` if the system is configured for - fatal deprecations. - - """ - stdmsg = _("Deprecated: %s") % msg - if CONF.fatal_deprecations: - self.critical(stdmsg, *args, **kwargs) - raise DeprecatedConfig(msg=stdmsg) - - # Using a list because a tuple with dict can't be stored in a set. - sent_args = self._deprecated_messages_sent.setdefault(msg, list()) - - if args in sent_args: - # Already logged this message, so don't log it again. - return - - sent_args.append(args) - self.warn(stdmsg, *args, **kwargs) - - def process(self, msg, kwargs): - # NOTE(mrodden): catch any Message/other object and - # coerce to unicode before they can get - # to the python logging and possibly - # cause string encoding trouble - if not isinstance(msg, six.string_types): - msg = six.text_type(msg) - - if 'extra' not in kwargs: - kwargs['extra'] = {} - extra = kwargs['extra'] - - context = kwargs.pop('context', None) - if not context: - context = getattr(local.store, 'context', None) - if context: - extra.update(_dictify_context(context)) - - instance = kwargs.pop('instance', None) - instance_uuid = (extra.get('instance_uuid') or - kwargs.pop('instance_uuid', None)) - instance_extra = '' - if instance: - instance_extra = CONF.instance_format % instance - elif instance_uuid: - instance_extra = (CONF.instance_uuid_format - % {'uuid': instance_uuid}) - extra['instance'] = instance_extra - - extra.setdefault('user_identity', kwargs.pop('user_identity', None)) - - extra['project'] = self.project - extra['version'] = self.version - extra['extra'] = extra.copy() - return msg, kwargs - - -class JSONFormatter(logging.Formatter): - def __init__(self, fmt=None, datefmt=None): - # NOTE(jkoelker) we ignore the fmt argument, but its still there - # since logging.config.fileConfig passes it. - self.datefmt = datefmt - - def formatException(self, ei, strip_newlines=True): - lines = traceback.format_exception(*ei) - if strip_newlines: - lines = [moves.filter( - lambda x: x, - line.rstrip().splitlines()) for line in lines] - lines = list(itertools.chain(*lines)) - return lines - - def format(self, record): - message = {'message': record.getMessage(), - 'asctime': self.formatTime(record, self.datefmt), - 'name': record.name, - 'msg': record.msg, - 'args': record.args, - 'levelname': record.levelname, - 'levelno': record.levelno, - 'pathname': record.pathname, - 'filename': record.filename, - 'module': record.module, - 'lineno': record.lineno, - 'funcname': record.funcName, - 'created': record.created, - 'msecs': record.msecs, - 'relative_created': record.relativeCreated, - 'thread': record.thread, - 'thread_name': record.threadName, - 'process_name': record.processName, - 'process': record.process, - 'traceback': None} - - if hasattr(record, 'extra'): - message['extra'] = record.extra - - if record.exc_info: - message['traceback'] = self.formatException(record.exc_info) - - return jsonutils.dumps(message) - - -def _create_logging_excepthook(product_name): - def logging_excepthook(exc_type, value, tb): - extra = {'exc_info': (exc_type, value, tb)} - getLogger(product_name).critical( - "".join(traceback.format_exception_only(exc_type, value)), - **extra) - return logging_excepthook - - -class LogConfigError(Exception): - - message = _('Error loading logging config %(log_config)s: %(err_msg)s') - - def __init__(self, log_config, err_msg): - self.log_config = log_config - self.err_msg = err_msg - - def __str__(self): - return self.message % dict(log_config=self.log_config, - err_msg=self.err_msg) - - -def _load_log_config(log_config_append): - try: - logging.config.fileConfig(log_config_append, - disable_existing_loggers=False) - except moves.configparser.Error as exc: - raise LogConfigError(log_config_append, six.text_type(exc)) - - -def setup(product_name, version='unknown'): - """Setup logging.""" - if CONF.log_config_append: - _load_log_config(CONF.log_config_append) - else: - _setup_logging_from_conf(product_name, version) - sys.excepthook = _create_logging_excepthook(product_name) - - -def set_defaults(logging_context_format_string): - cfg.set_defaults(log_opts, - logging_context_format_string= - logging_context_format_string) - - -def _find_facility_from_conf(): - facility_names = logging.handlers.SysLogHandler.facility_names - facility = getattr(logging.handlers.SysLogHandler, - CONF.syslog_log_facility, - None) - - 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() - consts = ['LOG_AUTH', 'LOG_AUTHPRIV', 'LOG_CRON', 'LOG_DAEMON', - 'LOG_FTP', 'LOG_KERN', 'LOG_LPR', 'LOG_MAIL', 'LOG_NEWS', - 'LOG_AUTH', 'LOG_SYSLOG', 'LOG_USER', 'LOG_UUCP', - 'LOG_LOCAL0', 'LOG_LOCAL1', 'LOG_LOCAL2', 'LOG_LOCAL3', - 'LOG_LOCAL4', 'LOG_LOCAL5', 'LOG_LOCAL6', 'LOG_LOCAL7'] - valid_facilities.extend(consts) - raise TypeError(_('syslog facility must be one of: %s') % - ', '.join("'%s'" % fac - for fac in valid_facilities)) - - return facility - - -class RFCSysLogHandler(logging.handlers.SysLogHandler): - def __init__(self, *args, **kwargs): - self.binary_name = _get_binary_name() - # Do not use super() unless type(logging.handlers.SysLogHandler) - # is 'type' (Python 2.7). - # Use old style calls, if the type is 'classobj' (Python 2.6) - logging.handlers.SysLogHandler.__init__(self, *args, **kwargs) - - def format(self, record): - # Do not use super() unless type(logging.handlers.SysLogHandler) - # is 'type' (Python 2.7). - # Use old style calls, if the type is 'classobj' (Python 2.6) - msg = logging.handlers.SysLogHandler.format(self, record) - msg = self.binary_name + ' ' + msg - return msg - - -def _setup_logging_from_conf(project, version): - log_root = getLogger(None).logger - for handler in log_root.handlers: - log_root.removeHandler(handler) - - if CONF.use_syslog: - facility = _find_facility_from_conf() - # TODO(bogdando) use the format provided by RFCSysLogHandler - # after existing syslog format deprecation in J - if CONF.use_syslog_rfc_format: - syslog = RFCSysLogHandler(address='/dev/log', - facility=facility) - else: - syslog = logging.handlers.SysLogHandler(address='/dev/log', - facility=facility) - log_root.addHandler(syslog) - - logpath = _get_log_file_path() - if logpath: - filelog = logging.handlers.WatchedFileHandler(logpath) - log_root.addHandler(filelog) - - if CONF.use_stderr: - streamlog = ColorHandler() - log_root.addHandler(streamlog) - - elif not logpath: - # 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 CONF.publish_errors: - handler = importutils.import_object( - "mistral.openstack.common.log_handler.PublishErrorsHandler", - logging.ERROR) - log_root.addHandler(handler) - - datefmt = CONF.log_date_format - for handler in log_root.handlers: - # NOTE(alaski): CONF.log_format overrides everything currently. This - # should be deprecated in favor of context aware formatting. - if CONF.log_format: - handler.setFormatter(logging.Formatter(fmt=CONF.log_format, - datefmt=datefmt)) - log_root.info('Deprecated: log_format is now deprecated and will ' - 'be removed in the next release') - else: - handler.setFormatter(ContextFormatter(project=project, - version=version, - datefmt=datefmt)) - - if CONF.debug: - log_root.setLevel(logging.DEBUG) - elif CONF.verbose: - log_root.setLevel(logging.INFO) - else: - log_root.setLevel(logging.WARNING) - - for pair in CONF.default_log_levels: - mod, _sep, level_name = pair.partition('=') - logger = logging.getLogger(mod) - # NOTE(AAzza) in python2.6 Logger.setLevel doesn't convert string name - # to integer code. - if sys.version_info < (2, 7): - level = logging.getLevelName(level_name) - logger.setLevel(level) - else: - logger.setLevel(level_name) - - -_loggers = {} - - -def getLogger(name='unknown', version='unknown'): - if name not in _loggers: - _loggers[name] = ContextAdapter(logging.getLogger(name), - name, - version) - return _loggers[name] - - -def getLazyLogger(name='unknown', version='unknown'): - """Returns lazy logger. - - Creates 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.""" - - def __init__(self, logger, level=logging.INFO): - self.logger = logger - self.level = level - - def write(self, msg): - self.logger.log(self.level, msg.rstrip()) - - -class ContextFormatter(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 - - If available, uses the context value stored in TLS - local.store.context - - """ - - def __init__(self, *args, **kwargs): - """Initialize ContextFormatter instance - - Takes additional keyword arguments which can be used in the message - format string. - - :keyword project: project name - :type project: string - :keyword version: project version - :type version: string - - """ - - self.project = kwargs.pop('project', 'unknown') - self.version = kwargs.pop('version', 'unknown') - - logging.Formatter.__init__(self, *args, **kwargs) - - def format(self, record): - """Uses contextstring if request_id is set, otherwise default.""" - - # store project info - record.project = self.project - record.version = self.version - - # store request info - context = getattr(local.store, 'context', None) - if context: - d = _dictify_context(context) - for k, v in d.items(): - setattr(record, k, v) - - # NOTE(sdague): default the fancier formatting params - # to an empty string so we don't throw an exception if - # they get used - for key in ('instance', 'color', 'user_identity'): - if key not in record.__dict__: - record.__dict__[key] = '' - - if record.__dict__.get('request_id'): - 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 formatted 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 = moves.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) - - -class DeprecatedConfig(Exception): - message = _("Fatal call to deprecated config: %(msg)s") - - def __init__(self, msg): - super(Exception, self).__init__(self.message % dict(msg=msg)) diff --git a/mistral/openstack/common/loopingcall.py b/mistral/openstack/common/loopingcall.py index 87656022..4abfaed0 100644 --- a/mistral/openstack/common/loopingcall.py +++ b/mistral/openstack/common/loopingcall.py @@ -15,13 +15,13 @@ # License for the specific language governing permissions and limitations # under the License. +import logging import sys from eventlet import event from eventlet import greenthread from mistral.openstack.common.gettextutils import _LE, _LW -from mistral.openstack.common import log as logging from mistral.openstack.common import timeutils LOG = logging.getLogger(__name__) diff --git a/mistral/openstack/common/periodic_task.py b/mistral/openstack/common/periodic_task.py index ec025526..a3e9daa7 100644 --- a/mistral/openstack/common/periodic_task.py +++ b/mistral/openstack/common/periodic_task.py @@ -11,13 +11,13 @@ # License for the specific language governing permissions and limitations # under the License. +import logging import time from oslo.config import cfg import six from mistral.openstack.common.gettextutils import _, _LE, _LI -from mistral.openstack.common import log as logging periodic_opts = [ diff --git a/mistral/openstack/common/threadgroup.py b/mistral/openstack/common/threadgroup.py index 0480ac73..edcabc8b 100644 --- a/mistral/openstack/common/threadgroup.py +++ b/mistral/openstack/common/threadgroup.py @@ -11,12 +11,12 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +import logging import threading import eventlet from eventlet import greenpool -from mistral.openstack.common import log as logging from mistral.openstack.common import loopingcall @@ -97,7 +97,7 @@ class ThreadGroup(object): try: x.stop() except Exception as ex: - LOG.exception(ex) + LOG.exception(six.text_type(ex)) def stop_timers(self): for x in self.timers: diff --git a/mistral/services/action_manager.py b/mistral/services/action_manager.py index 53793464..e261c36b 100644 --- a/mistral/services/action_manager.py +++ b/mistral/services/action_manager.py @@ -15,13 +15,13 @@ import inspect +from oslo_log import log as logging from stevedore import extension from mistral.actions import action_factory from mistral.actions import generator_factory from mistral.db.v2 import api as db_api from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import actions from mistral import utils from mistral.utils import inspect_utils as i_utils diff --git a/mistral/services/periodic.py b/mistral/services/periodic.py index 2b028b0c..cb683b2f 100644 --- a/mistral/services/periodic.py +++ b/mistral/services/periodic.py @@ -14,16 +14,17 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging + from mistral import context as auth_ctx from mistral.db.v2 import api as db_api_v2 from mistral.engine import rpc -from mistral.openstack.common import log from mistral.openstack.common import periodic_task from mistral.openstack.common import threadgroup from mistral.services import security from mistral.services import triggers -LOG = log.getLogger(__name__) +LOG = logging.getLogger(__name__) class MistralPeriodicTasks(periodic_task.PeriodicTasks): diff --git a/mistral/services/scheduler.py b/mistral/services/scheduler.py index 652e20c6..d4edcbaa 100644 --- a/mistral/services/scheduler.py +++ b/mistral/services/scheduler.py @@ -15,16 +15,17 @@ import copy import datetime +from oslo_log import log as logging + from mistral import context from mistral.db.v2 import api as db_api from mistral import exceptions as exc from mistral.openstack.common import importutils -from mistral.openstack.common import log from mistral.openstack.common import periodic_task from mistral.openstack.common import threadgroup -LOG = log.getLogger(__name__) +LOG = logging.getLogger(__name__) # {scheduler_instance: thread_group} _schedulers = {} diff --git a/mistral/tests/base.py b/mistral/tests/base.py index 0c91ff7a..b6b0cacc 100644 --- a/mistral/tests/base.py +++ b/mistral/tests/base.py @@ -19,6 +19,7 @@ import sys import time from oslo.config import cfg +from oslo_log import log as logging from oslotest import base import testtools.matchers as ttm @@ -26,7 +27,6 @@ from mistral import context as auth_context from mistral.db.sqlalchemy import base as db_sa_base from mistral.db.sqlalchemy import sqlite_lock from mistral.db.v2 import api as db_api_v2 -from mistral.openstack.common import log as logging from mistral.services import action_manager from mistral import version diff --git a/mistral/tests/unit/actions/test_action_manager.py b/mistral/tests/unit/actions/test_action_manager.py index 5c6dc79d..a92b1523 100644 --- a/mistral/tests/unit/actions/test_action_manager.py +++ b/mistral/tests/unit/actions/test_action_manager.py @@ -14,8 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging + from mistral.actions import std_actions as std -from mistral.openstack.common import log as logging from mistral.services import action_manager as a_m from mistral.tests import base diff --git a/mistral/tests/unit/engine/base.py b/mistral/tests/unit/engine/base.py index 76ee38c3..975ad4e1 100644 --- a/mistral/tests/unit/engine/base.py +++ b/mistral/tests/unit/engine/base.py @@ -15,13 +15,13 @@ import eventlet from oslo.config import cfg from oslo import messaging +from oslo_log import log as logging from mistral import context as ctx from mistral.db.v2 import api as db_api from mistral.engine import default_engine as def_eng from mistral.engine import default_executor as def_exec from mistral.engine import rpc -from mistral.openstack.common import log as logging from mistral.services import scheduler from mistral.tests import base from mistral.workflow import states diff --git a/mistral/tests/unit/engine/test_action_context.py b/mistral/tests/unit/engine/test_action_context.py index 97eba69d..907ab9db 100644 --- a/mistral/tests/unit/engine/test_action_context.py +++ b/mistral/tests/unit/engine/test_action_context.py @@ -16,11 +16,11 @@ import json import mock from oslo.config import cfg +from oslo_log import log as logging import requests from mistral.actions import std_actions from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.tests.unit.engine import base from mistral.workflow import states diff --git a/mistral/tests/unit/engine/test_action_defaults.py b/mistral/tests/unit/engine/test_action_defaults.py index 3a0f740d..0f38a740 100644 --- a/mistral/tests/unit/engine/test_action_defaults.py +++ b/mistral/tests/unit/engine/test_action_defaults.py @@ -16,12 +16,12 @@ import json import mock from oslo.config import cfg +from oslo_log import log as logging import requests import testtools from mistral.actions import std_actions from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workflows as wf_service from mistral.tests.unit.engine import base from mistral.workflow import states diff --git a/mistral/tests/unit/engine/test_adhoc_actions.py b/mistral/tests/unit/engine/test_adhoc_actions.py index 350144bd..d9887e2d 100644 --- a/mistral/tests/unit/engine/test_adhoc_actions.py +++ b/mistral/tests/unit/engine/test_adhoc_actions.py @@ -13,10 +13,10 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.tests.unit.engine import base diff --git a/mistral/tests/unit/engine/test_commands.py b/mistral/tests/unit/engine/test_commands.py index 20c4354e..6dfd75ec 100644 --- a/mistral/tests/unit/engine/test_commands.py +++ b/mistral/tests/unit/engine/test_commands.py @@ -13,9 +13,9 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.tests.unit.engine import base from mistral.workflow import states diff --git a/mistral/tests/unit/engine/test_dataflow.py b/mistral/tests/unit/engine/test_dataflow.py index 551b4a54..0e3d62cb 100644 --- a/mistral/tests/unit/engine/test_dataflow.py +++ b/mistral/tests/unit/engine/test_dataflow.py @@ -14,10 +14,10 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api from mistral.db.v2.sqlalchemy import models -from mistral.openstack.common import log as logging from mistral.services import workflows as wf_service from mistral.tests import base as test_base from mistral.tests.unit.engine import base as engine_test_base diff --git a/mistral/tests/unit/engine/test_default_engine.py b/mistral/tests/unit/engine/test_default_engine.py index e01d1b22..1827a2cd 100644 --- a/mistral/tests/unit/engine/test_default_engine.py +++ b/mistral/tests/unit/engine/test_default_engine.py @@ -18,13 +18,13 @@ import uuid import mock from oslo.config import cfg +from oslo_log import log as logging from oslo_messaging.rpc import client as rpc_client from mistral.db.v2 import api as db_api from mistral.db.v2.sqlalchemy import models from mistral.engine import default_engine as d_eng from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.tests import base from mistral.tests.unit.engine import base as eng_test_base diff --git a/mistral/tests/unit/engine/test_direct_workflow.py b/mistral/tests/unit/engine/test_direct_workflow.py index 278e82cc..02224acf 100644 --- a/mistral/tests/unit/engine/test_direct_workflow.py +++ b/mistral/tests/unit/engine/test_direct_workflow.py @@ -14,11 +14,11 @@ import mock from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api from mistral.engine import default_engine as de from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import workflows as wf_service from mistral.tests.unit.engine import base from mistral.workflow import states diff --git a/mistral/tests/unit/engine/test_environment.py b/mistral/tests/unit/engine/test_environment.py index ead3aa81..574dfc80 100644 --- a/mistral/tests/unit/engine/test_environment.py +++ b/mistral/tests/unit/engine/test_environment.py @@ -14,11 +14,11 @@ import mock from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api from mistral.engine import default_executor from mistral.engine import rpc -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.tests.unit.engine import base diff --git a/mistral/tests/unit/engine/test_javascript_action.py b/mistral/tests/unit/engine/test_javascript_action.py index 437d1380..cdaf36b3 100644 --- a/mistral/tests/unit/engine/test_javascript_action.py +++ b/mistral/tests/unit/engine/test_javascript_action.py @@ -14,10 +14,10 @@ import mock from oslo.config import cfg +from oslo_log import log as logging import testtools from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.tests.unit.engine import base from mistral.utils import javascript diff --git a/mistral/tests/unit/engine/test_join.py b/mistral/tests/unit/engine/test_join.py index 0dc2e877..27833de9 100644 --- a/mistral/tests/unit/engine/test_join.py +++ b/mistral/tests/unit/engine/test_join.py @@ -13,10 +13,10 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging import testtools from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workflows as wf_service from mistral.tests.unit.engine import base from mistral.workflow import states diff --git a/mistral/tests/unit/engine/test_noop_task.py b/mistral/tests/unit/engine/test_noop_task.py index f6a9e39b..f296fbd0 100644 --- a/mistral/tests/unit/engine/test_noop_task.py +++ b/mistral/tests/unit/engine/test_noop_task.py @@ -13,9 +13,9 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workflows as wf_service from mistral.tests.unit.engine import base from mistral.workflow import states diff --git a/mistral/tests/unit/engine/test_policies.py b/mistral/tests/unit/engine/test_policies.py index 9330495f..6def95dc 100644 --- a/mistral/tests/unit/engine/test_policies.py +++ b/mistral/tests/unit/engine/test_policies.py @@ -13,11 +13,11 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api from mistral.engine import policies from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.services import workflows as wf_service from mistral.tests.unit.engine import base diff --git a/mistral/tests/unit/engine/test_race_condition.py b/mistral/tests/unit/engine/test_race_condition.py index 02a65a8e..f2d3235d 100644 --- a/mistral/tests/unit/engine/test_race_condition.py +++ b/mistral/tests/unit/engine/test_race_condition.py @@ -15,10 +15,10 @@ from eventlet import corolocal from eventlet import semaphore from oslo.config import cfg +from oslo_log import log as logging from mistral.actions import base as action_base from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import action_manager as a_m from mistral.services import workflows as wf_service from mistral.tests.unit.engine import base diff --git a/mistral/tests/unit/engine/test_reverse_workflow.py b/mistral/tests/unit/engine/test_reverse_workflow.py index cc09f5a6..b387aad7 100644 --- a/mistral/tests/unit/engine/test_reverse_workflow.py +++ b/mistral/tests/unit/engine/test_reverse_workflow.py @@ -13,9 +13,9 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.tests.unit.engine import base from mistral.workflow import states diff --git a/mistral/tests/unit/engine/test_subworkflows.py b/mistral/tests/unit/engine/test_subworkflows.py index 1d96279d..5393b6dc 100644 --- a/mistral/tests/unit/engine/test_subworkflows.py +++ b/mistral/tests/unit/engine/test_subworkflows.py @@ -15,12 +15,12 @@ import mock from oslo.config import cfg +from oslo_log import log as logging from mistral.actions import std_actions from mistral import context as auth_context from mistral.db.v2 import api as db_api from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.tests.unit.engine import base diff --git a/mistral/tests/unit/engine/test_task_defaults.py b/mistral/tests/unit/engine/test_task_defaults.py index 4441e5c4..ed2aedb6 100644 --- a/mistral/tests/unit/engine/test_task_defaults.py +++ b/mistral/tests/unit/engine/test_task_defaults.py @@ -14,10 +14,10 @@ import datetime as dt from oslo.config import cfg +from oslo_log import log as logging import testtools from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import scheduler from mistral.services import workflows as wf_service from mistral.tests.unit.engine import base diff --git a/mistral/tests/unit/engine/test_with_items.py b/mistral/tests/unit/engine/test_with_items.py index ea0f423c..e01a4e23 100644 --- a/mistral/tests/unit/engine/test_with_items.py +++ b/mistral/tests/unit/engine/test_with_items.py @@ -14,11 +14,11 @@ import copy from oslo.config import cfg +from oslo_log import log as logging from mistral.actions import base as action_base from mistral.db.v2 import api as db_api from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import action_manager from mistral.services import workbooks as wb_service from mistral.tests.unit.engine import base diff --git a/mistral/tests/unit/services/test_action_service.py b/mistral/tests/unit/services/test_action_service.py index 9e70fc8f..1b69200d 100644 --- a/mistral/tests/unit/services/test_action_service.py +++ b/mistral/tests/unit/services/test_action_service.py @@ -13,9 +13,9 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import actions as action_service from mistral.tests import base from mistral import utils diff --git a/mistral/tests/unit/services/test_workbook_service.py b/mistral/tests/unit/services/test_workbook_service.py index 470ecde1..364474be 100644 --- a/mistral/tests/unit/services/test_workbook_service.py +++ b/mistral/tests/unit/services/test_workbook_service.py @@ -13,9 +13,9 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api -from mistral.openstack.common import log as logging from mistral.services import workbooks as wb_service from mistral.tests import base from mistral.workbook import parser as spec_parser diff --git a/mistral/tests/unit/services/test_workflow_service.py b/mistral/tests/unit/services/test_workflow_service.py index 4c28b65b..b9ac5dad 100644 --- a/mistral/tests/unit/services/test_workflow_service.py +++ b/mistral/tests/unit/services/test_workflow_service.py @@ -13,9 +13,9 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.services import workflows as wf_service from mistral.tests import base from mistral import utils diff --git a/mistral/tests/unit/workbook/v2/base.py b/mistral/tests/unit/workbook/v2/base.py index 6a4099e1..45f5f5d5 100644 --- a/mistral/tests/unit/workbook/v2/base.py +++ b/mistral/tests/unit/workbook/v2/base.py @@ -14,10 +14,10 @@ import copy +from oslo_log import log as logging import yaml from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.tests import base from mistral import utils from mistral.workbook import parser as spec_parser diff --git a/mistral/tests/unit/workbook/v2/test_actions.py b/mistral/tests/unit/workbook/v2/test_actions.py index cbb4ce4d..bd86bc47 100644 --- a/mistral/tests/unit/workbook/v2/test_actions.py +++ b/mistral/tests/unit/workbook/v2/test_actions.py @@ -14,7 +14,8 @@ import copy -from mistral.openstack.common import log as logging +from oslo_log import log as logging + from mistral.tests.unit.workbook.v2 import base from mistral import utils diff --git a/mistral/tests/unit/workbook/v2/test_tasks.py b/mistral/tests/unit/workbook/v2/test_tasks.py index 76ce8c71..1bbd82ae 100644 --- a/mistral/tests/unit/workbook/v2/test_tasks.py +++ b/mistral/tests/unit/workbook/v2/test_tasks.py @@ -13,8 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging + from mistral import exceptions -from mistral.openstack.common import log as logging from mistral.tests import base from mistral.tests.unit.workbook.v2 import base as v2_base from mistral import utils diff --git a/mistral/tests/unit/workbook/v2/test_workbook.py b/mistral/tests/unit/workbook/v2/test_workbook.py index e9d8d419..dd6e3d25 100644 --- a/mistral/tests/unit/workbook/v2/test_workbook.py +++ b/mistral/tests/unit/workbook/v2/test_workbook.py @@ -15,10 +15,10 @@ import copy +from oslo_log import log as logging import yaml from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.tests.unit.workbook.v2 import base diff --git a/mistral/tests/unit/workbook/v2/test_workflows.py b/mistral/tests/unit/workbook/v2/test_workflows.py index b7dbcd85..ba76ec12 100644 --- a/mistral/tests/unit/workbook/v2/test_workflows.py +++ b/mistral/tests/unit/workbook/v2/test_workflows.py @@ -14,10 +14,10 @@ import copy +from oslo_log import log as logging import yaml from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.tests.unit.workbook.v2 import base from mistral import utils from mistral.workbook.v2 import tasks diff --git a/mistral/tests/unit/workflow/test_direct_workflow.py b/mistral/tests/unit/workflow/test_direct_workflow.py index c0f2de5c..4f26f3fe 100644 --- a/mistral/tests/unit/workflow/test_direct_workflow.py +++ b/mistral/tests/unit/workflow/test_direct_workflow.py @@ -15,10 +15,10 @@ # limitations under the License. import mock +from oslo_log import log as logging from mistral.db.v2 import api as db_api from mistral.db.v2.sqlalchemy import models -from mistral.openstack.common import log as logging from mistral.tests import base from mistral.workbook import parser as spec_parser from mistral.workflow import direct_workflow as d_wf diff --git a/mistral/tests/unit/workflow/test_reverse_workflow.py b/mistral/tests/unit/workflow/test_reverse_workflow.py index 30d01a4d..4f3cae86 100644 --- a/mistral/tests/unit/workflow/test_reverse_workflow.py +++ b/mistral/tests/unit/workflow/test_reverse_workflow.py @@ -12,9 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging + from mistral.db.v2.sqlalchemy import models from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral.tests import base from mistral.workbook import parser as spec_parser from mistral.workflow import reverse_workflow as reverse_wf diff --git a/mistral/tests/unit/workflow/test_states.py b/mistral/tests/unit/workflow/test_states.py index e11ee7f8..6683c59a 100644 --- a/mistral/tests/unit/workflow/test_states.py +++ b/mistral/tests/unit/workflow/test_states.py @@ -14,7 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -from mistral.openstack.common import log as logging +from oslo_log import log as logging + from mistral.tests import base from mistral.workflow import states as s diff --git a/mistral/utils/ssh_utils.py b/mistral/utils/ssh_utils.py index 5e2fcb6d..180ab30a 100644 --- a/mistral/utils/ssh_utils.py +++ b/mistral/utils/ssh_utils.py @@ -14,10 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging import paramiko -from mistral.openstack.common import log as logging - LOG = logging.getLogger(__name__) diff --git a/mistral/utils/wf_trace.py b/mistral/utils/wf_trace.py index 916fe93e..c2ae2b56 100644 --- a/mistral/utils/wf_trace.py +++ b/mistral/utils/wf_trace.py @@ -14,9 +14,9 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2.sqlalchemy import models -from mistral.openstack.common import log as logging cfg.CONF.import_opt('workflow_trace_log_name', 'mistral.config') WF_TRACE = logging.getLogger(cfg.CONF.workflow_trace_log_name) diff --git a/mistral/workflow/base.py b/mistral/workflow/base.py index bc49dc3c..cec0386e 100644 --- a/mistral/workflow/base.py +++ b/mistral/workflow/base.py @@ -17,8 +17,9 @@ import abc import copy +from oslo_log import log as logging + from mistral import exceptions as exc -from mistral.openstack.common import log as logging from mistral import utils as u from mistral.workbook import parser as spec_parser from mistral.workflow import commands diff --git a/mistral/workflow/data_flow.py b/mistral/workflow/data_flow.py index 1f23ff7b..32a292e7 100644 --- a/mistral/workflow/data_flow.py +++ b/mistral/workflow/data_flow.py @@ -16,12 +16,12 @@ import copy from oslo.config import cfg +from oslo_log import log as logging from mistral import context as auth_ctx from mistral.db.v2 import api as db_api from mistral.db.v2.sqlalchemy import models from mistral import expressions as expr -from mistral.openstack.common import log as logging from mistral import utils from mistral.utils import inspect_utils from mistral.workflow import states diff --git a/mistral/workflow/direct_workflow.py b/mistral/workflow/direct_workflow.py index b95209bc..37c61fc8 100644 --- a/mistral/workflow/direct_workflow.py +++ b/mistral/workflow/direct_workflow.py @@ -12,8 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_log import log as logging + from mistral import expressions as expr -from mistral.openstack.common import log as logging from mistral import utils from mistral.workflow import base from mistral.workflow import commands diff --git a/openstack-common.conf b/openstack-common.conf index c9934f0b..ddb697d0 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -1,7 +1,6 @@ [DEFAULT] # The list of modules to copy from oslo-incubator.git -module=log module=jsonutils module=lockutils module=loopingcall diff --git a/requirements.txt b/requirements.txt index 59aebb52..3b9a4e8e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,6 +14,7 @@ oslo.config>=1.11.0 # Apache-2.0 oslo.db>=1.7.0 # Apache-2.0 oslo.messaging>=1.8.0 oslo.utils>=1.4.0 # Apache-2.0 +oslo.log>=1.2.0 # Apache-2.0 paramiko>=1.13.0 pbr>=0.6,!=0.7,<1.0 pecan>=0.8.0 diff --git a/tools/sync_db.py b/tools/sync_db.py index 237a668e..12b3dae9 100644 --- a/tools/sync_db.py +++ b/tools/sync_db.py @@ -13,10 +13,10 @@ # limitations under the License. from oslo.config import cfg +from oslo_log import log as logging from mistral.db.v2 import api as db_api from mistral import config -from mistral.openstack.common import log as logging from mistral.services import action_manager from mistral.services import workflows @@ -32,7 +32,7 @@ def main(): print "Usage: sync_db --config-file " return exit(1) - logging.setup('Mistral') + logging.setup(CONF, 'Mistral') db_api.setup_db()