You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.9 KiB
92 lines
2.9 KiB
# Copyright 2018 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Shared logging functions for autotest drone services
|
|
|
|
autotest/site_utils/ is home to various upstart jobs and cron jobs that run on
|
|
autotest drones. All these jobs currently configure logging in different ways.
|
|
Worse, many of these scripts don't use logging at all, instead print()ing to
|
|
stdout and use external log file management.
|
|
|
|
This library provides a single consistent way to manage log configuration and
|
|
log directories for these scripts.
|
|
"""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
|
|
import logging
|
|
import logging.config
|
|
import os
|
|
|
|
|
|
def add_logging_options(parser):
|
|
"""Add logging configuration options to argument parser.
|
|
|
|
@param parser: ArgumentParser instance.
|
|
"""
|
|
parser.add_argument(
|
|
'--log-dir',
|
|
default=None,
|
|
help='(existing) directory to drop log files in.'
|
|
' By default, logs to stderr.',
|
|
)
|
|
|
|
|
|
def configure_logging_with_args(parser, args):
|
|
"""Convenience function for calling configure_logging().
|
|
|
|
@param parser: ArgumentParser instance.
|
|
@param args: Return value from ArgumentParser.parse_args().
|
|
"""
|
|
configure_logging(parser.prog, args.log_dir)
|
|
|
|
|
|
def configure_logging(name, log_dir=None):
|
|
"""Configure logging globally.
|
|
|
|
@param name: Name to prepend to log messages.
|
|
This should be the name of the program.
|
|
@param log_dir: Path to the (existing) direcotry to create log files in.
|
|
If None, logs to stderr.
|
|
"""
|
|
if log_dir is None:
|
|
handlers = {
|
|
'default': {
|
|
'class': 'logging.StreamHandler',
|
|
'formatter': 'default' ,
|
|
}
|
|
}
|
|
else:
|
|
handlers = {
|
|
'default': {
|
|
'class': 'logging.handlers.TimedRotatingFileHandler',
|
|
'formatter': 'default' ,
|
|
'filename': os.path.join(log_dir, '%s.log' % name),
|
|
'when': 'midnight',
|
|
'backupCount': 14,
|
|
}
|
|
}
|
|
|
|
|
|
logging.config.dictConfig({
|
|
'version': 1,
|
|
'handlers': handlers,
|
|
'formatters': {
|
|
'default': {
|
|
'format': ('{name}: '
|
|
'%(asctime)s:%(levelname)s'
|
|
':%(module)s:%(funcName)s:%(lineno)d'
|
|
': %(message)s'
|
|
.format(name=name)),
|
|
},
|
|
},
|
|
'root': {
|
|
'level': 'INFO',
|
|
'handlers': ['default'],
|
|
},
|
|
'disable_existing_loggers': False,
|
|
})
|