Merge "rename tempest.conf to refstack_tempest.conf"
[functest.git] / functest / utils / functest_logger.py
1 #!/usr/bin/env python
2 #
3 # jose.lausuch@ericsson.com
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Logging levels:
10 #  Level     Numeric value
11 #  CRITICAL  50
12 #  ERROR     40
13 #  WARNING   30
14 #  INFO      20
15 #  DEBUG     10
16 #  NOTSET    0
17 #
18 # Usage:
19 #  import functest_logger as fl
20 #  logger = fl.Logger("script_name").getLogger()
21 #  logger.info("message to be shown with - INFO - ")
22 #  logger.debug("message to be shown with - DEBUG -")
23 import logging
24 import logging.config
25 import os
26
27 import json
28
29 from functest.utils.constants import CONST
30
31 ignore = ["paramiko",
32           "stevedore.extension",
33           "keystoneauth.session",
34           "keystoneauth.identity.v3.base",
35           "novaclient.v2.client",
36           "neutronclient.v2_0.client",
37           "glanceclient.common.http",
38           "cinderclient.v2.client",
39           "cinderclient.client"]
40
41
42 class Logger(object):
43
44     instance = None
45
46     def __new__(cls, logger_name):
47         if cls.instance is None:
48             cls.instance = object.__new__(cls)
49         return cls.instance
50
51     def __init__(self, logger_name):
52         self.setup_logging()
53         self.logger = logging.getLogger(logger_name)
54         for module_name in ignore:
55             logging.getLogger(module_name).setLevel(logging.WARNING)
56
57     def getLogger(self):
58         return self.logger
59
60     def is_debug(self):
61         if CONST.CI_DEBUG and CONST.CI_DEBUG.lower() == "true":
62             return True
63         return False
64
65     def setup_logging(self, default_path=CONST.dir_functest_logging_cfg,
66                       default_level=logging.INFO,
67                       env_key='LOG_CFG'):
68         path = default_path
69         value = os.getenv(env_key, None)
70         if value:
71             path = value
72         if os.path.exists(path):
73             with open(path, 'rt') as f:
74                 config = json.load(f)
75                 if (config['handlers'] and
76                         config['handlers']['console']):
77                     stream_level = logging.INFO
78                     if self.is_debug():
79                         stream_level = logging.DEBUG
80                     config['handlers']['console']['level'] = stream_level
81                 logging.config.dictConfig(config)
82         else:
83             logging.basicConfig(level=default_level)