mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
96 lines
3.1 KiB
Python
96 lines
3.1 KiB
Python
#
|
|
#
|
|
#
|
|
|
|
from argparse import ArgumentParser as _Base
|
|
from logging import DEBUG, INFO, WARNING, Formatter, StreamHandler, getLogger
|
|
from logging.handlers import SysLogHandler
|
|
from sys import stderr, stdout
|
|
|
|
from octodns import __VERSION__
|
|
|
|
|
|
class ArgumentParser(_Base):
|
|
'''
|
|
Manages argument parsing and adds some defaults and takes action on them.
|
|
|
|
Also manages logging setup.
|
|
'''
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
|
|
def parse_args(self, default_log_level=INFO):
|
|
version = f'octoDNS {__VERSION__}'
|
|
self.add_argument(
|
|
'--version',
|
|
action='version',
|
|
version=version,
|
|
help='Print octoDNS version and exit',
|
|
)
|
|
self.add_argument(
|
|
'--log-stream-stdout',
|
|
action='store_true',
|
|
default=False,
|
|
help='Log to stdout instead of stderr',
|
|
)
|
|
_help = 'Send logging data to syslog in addition to stderr'
|
|
self.add_argument(
|
|
'--log-syslog', action='store_true', default=False, help=_help
|
|
)
|
|
self.add_argument(
|
|
'--syslog-device', default='/dev/log', help='Syslog device'
|
|
)
|
|
self.add_argument(
|
|
'--syslog-facility', default='local0', help='Syslog facility'
|
|
)
|
|
|
|
_help = 'Increase verbosity to get details and help track down issues'
|
|
self.add_argument(
|
|
'--debug', action='store_true', default=False, help=_help
|
|
)
|
|
|
|
_help = 'Decrease verbosity to show only warnings, errors, and the plan'
|
|
self.add_argument(
|
|
'--quiet', action='store_true', default=False, help=_help
|
|
)
|
|
|
|
args = super().parse_args()
|
|
self._setup_logging(args, default_log_level)
|
|
return args
|
|
|
|
def _setup_logging(self, args, default_log_level):
|
|
fmt = '%(asctime)s [%(thread)d] %(levelname)-5s %(name)s %(message)s'
|
|
formatter = Formatter(fmt=fmt, datefmt='%Y-%m-%dT%H:%M:%S ')
|
|
stream = stdout if args.log_stream_stdout else stderr
|
|
handler = StreamHandler(stream=stream)
|
|
handler.setFormatter(formatter)
|
|
logger = getLogger()
|
|
logger.addHandler(handler)
|
|
|
|
if args.log_syslog:
|
|
fmt = (
|
|
'octodns[%(process)-5s:%(thread)d]: %(name)s '
|
|
'%(levelname)-5s %(message)s'
|
|
)
|
|
handler = SysLogHandler(
|
|
address=args.syslog_device, facility=args.syslog_facility
|
|
)
|
|
handler.setFormatter(Formatter(fmt=fmt))
|
|
logger.addHandler(handler)
|
|
|
|
logger.level = default_log_level
|
|
if args.debug:
|
|
logger.level = DEBUG
|
|
elif args.quiet:
|
|
logger.level = WARNING
|
|
# we still want plans to come out during quite so set the plan
|
|
# logger output to info in case the PlanLogger is being used
|
|
getLogger('Plan').setLevel(INFO)
|
|
|
|
# TODO: these should move out of octoDNS core...
|
|
# boto is noisy, set it to warn
|
|
getLogger('botocore').level = WARNING
|
|
# DynectSession is noisy too
|
|
getLogger('DynectSession').level = WARNING
|