revamp logger setting
Bug: 112350430
Test: m acloud && test below command.
acloud setup
acloud setup -v
acloud setup -vv
acloud setup --log_file /tmp/acloud.log
Change-Id: Id6e25479461968c2ed9d3a68e46d5d54a1b0bc7a
diff --git a/public/acloud_common.py b/public/acloud_common.py
index c0189fb..32772e4 100755
--- a/public/acloud_common.py
+++ b/public/acloud_common.py
@@ -50,13 +50,6 @@
type=str,
default=None,
help="Path to log file.")
- parser.add_argument("-v",
- dest="verbose",
- action="store_true",
- default=False,
- help="Verbose mode")
- parser.add_argument("-vv",
- dest="very_verbose",
- action="store_true",
- default=False,
- help="Very verbose mode")
+ parser.add_argument('--verbose', '-v',
+ action='count',
+ default=0)
diff --git a/public/acloud_main.py b/public/acloud_main.py
index 1b0da84..a4778c1 100644
--- a/public/acloud_main.py
+++ b/public/acloud_main.py
@@ -69,7 +69,12 @@
import sys
# Needed to silence oauth2client.
-logging.basicConfig(level=logging.CRITICAL)
+# This is a workaround to get rid of below warning message:
+# 'No handlers could be found for logger "oauth2client.contrib.multistore_file'
+# TODO(b/112803893): Remove this code once bug is fixed.
+OAUTH2_LOGGER = logging.getLogger('oauth2client.contrib.multistore_file')
+OAUTH2_LOGGER.setLevel(logging.CRITICAL)
+OAUTH2_LOGGER.addHandler(logging.FileHandler("/dev/null"))
# pylint: disable=wrong-import-position
from acloud.internal import constants
@@ -84,8 +89,8 @@
from acloud.setup import setup
from acloud.setup import setup_args
-LOGGING_FMT = "%(asctime)s |%(levelname)s| %(module)s:%(lineno)s| %(message)s"
-LOGGER_NAME = "acloud_main"
+LOGGING_FMT = "%(asctime)s |%(levelname)s| %(name)s:%(lineno)s| %(message)s"
+ACLOUD_LOGGER = "acloud"
# Commands
CMD_CREATE_CUTTLEFISH = "create_cf"
@@ -335,28 +340,59 @@
"--logcat_file must ends with .tar.gz")
-def _SetupLogging(log_file, verbose, very_verbose):
+def _SetupLogging(log_file, verbose):
"""Setup logging.
+ This function define the logging policy in below manners.
+ - without -v , -vv ,--log_file:
+ Only display critical log and print() message on screen.
+
+ - with -v:
+ Display INFO log and set StreamHandler to acloud parent logger to turn on
+ ONLY acloud modules logging.(silence all 3p libraries)
+
+ - with -vv:
+ Display INFO/DEBUG log and set StreamHandler to root logger to turn on all
+ acloud modules and 3p libraries logging.
+
+ - with --log_file.
+ Dump logs to FileHandler with DEBUG level.
+
Args:
- log_file: path to log file.
- verbose: If True, log at DEBUG level, otherwise log at INFO level.
- very_verbose: If True, log at DEBUG level and turn on logging on
- all libraries. Take take precedence over |verbose|.
+ log_file: String, if not None, dump the log to log file.
+ verbose: Int, if verbose = 1(-v), log at INFO level and turn on
+ logging on libraries to a StreamHandler.
+ If verbose = 2(-vv), log at DEBUG level and turn on logging on
+ all libraries and 3rd party libraries to a StreamHandler.
"""
- if very_verbose:
+ # Define logging level and hierarchy by verbosity.
+ shandler_level = None
+ logger = None
+ if verbose == 0:
+ shandler_level = logging.CRITICAL
+ logger = logging.getLogger(ACLOUD_LOGGER)
+ elif verbose == 1:
+ shandler_level = logging.INFO
+ logger = logging.getLogger(ACLOUD_LOGGER)
+ elif verbose > 1:
+ shandler_level = logging.DEBUG
logger = logging.getLogger()
- else:
- logger = logging.getLogger(LOGGER_NAME)
- logging_level = logging.DEBUG if verbose or very_verbose else logging.INFO
- logger.setLevel(logging_level)
+ # Add StreamHandler by default.
+ shandler = logging.StreamHandler()
+ shandler.setFormatter(logging.Formatter(LOGGING_FMT))
+ shandler.setLevel(shandler_level)
+ logger.addHandler(shandler)
+ # Set the default level to DEBUG, the other handlers will handle
+ # their own levels via the args supplied (-v and --log_file).
+ logger.setLevel(logging.DEBUG)
+ # Add FileHandler if log_file is provided.
if log_file:
- handler = logging.FileHandler(filename=log_file)
- log_formatter = logging.Formatter(LOGGING_FMT)
- handler.setFormatter(log_formatter)
- logger.addHandler(handler)
+ fhandler = logging.FileHandler(filename=log_file)
+ fhandler.setFormatter(logging.Formatter(LOGGING_FMT))
+ fhandler.setLevel(logging.DEBUG)
+ logger.addHandler(fhandler)
def main(argv):
@@ -369,7 +405,7 @@
0 if success. None-zero if fails.
"""
args = _ParseArgs(argv)
- _SetupLogging(args.log_file, args.verbose, args.very_verbose)
+ _SetupLogging(args.log_file, args.verbose)
args = _TranslateAlias(args)
_VerifyArgs(args)