Merge "Update cirros image to latest version"
[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
32 class Logger(object):
33
34     def __init__(self, logger_name):
35         self.setup_logging()
36         self.logger = logging.getLogger(logger_name)
37         logging.getLogger("paramiko").setLevel(logging.WARNING)
38
39     def getLogger(self):
40         return self.logger
41
42     def is_debug(self):
43         if CONST.CI_DEBUG and CONST.CI_DEBUG.lower() == "true":
44             return True
45         return False
46
47     def setup_logging(self, default_path=CONST.dir_functest_logging_cfg,
48                       default_level=logging.INFO,
49                       env_key='LOG_CFG'):
50         path = default_path
51         value = os.getenv(env_key, None)
52         if value:
53             path = value
54         if os.path.exists(path):
55             with open(path, 'rt') as f:
56                 config = json.load(f)
57                 if (config['handlers'] and
58                         config['handlers']['console']):
59                     stream_level = logging.INFO
60                     if self.is_debug():
61                         stream_level = logging.DEBUG
62                     config['handlers']['console']['level'] = stream_level
63                 logging.config.dictConfig(config)
64         else:
65             logging.basicConfig(level=default_level)