diff options
Diffstat (limited to 'rpki')
-rw-r--r-- | rpki/adns.py | 2 | ||||
-rw-r--r-- | rpki/irdbd.py | 7 | ||||
-rw-r--r-- | rpki/log.py | 104 | ||||
-rw-r--r-- | rpki/old_irdbd.py | 7 | ||||
-rw-r--r-- | rpki/pubd.py | 7 | ||||
-rw-r--r-- | rpki/rootd.py | 7 | ||||
-rw-r--r-- | rpki/rpkic.py | 2 | ||||
-rw-r--r-- | rpki/rpkid.py | 7 |
8 files changed, 103 insertions, 40 deletions
diff --git a/rpki/adns.py b/rpki/adns.py index a6a900ed..50841f7f 100644 --- a/rpki/adns.py +++ b/rpki/adns.py @@ -317,7 +317,7 @@ class getaddrinfo(object): if __name__ == "__main__": - rpki.log.init("test-adns", use_syslog = False) + rpki.log.init("test-adns") print "Some adns tests may take a minute or two, please be patient" class test_getaddrinfo(object): diff --git a/rpki/irdbd.py b/rpki/irdbd.py index 41739dc4..850f8ac8 100644 --- a/rpki/irdbd.py +++ b/rpki/irdbd.py @@ -153,22 +153,21 @@ class main(object): parser = argparse.ArgumentParser(description = __doc__) parser.add_argument("-c", "--config", help = "override default location of configuration file") - parser.add_argument("-d", "--debug", action = "store_true", - help = "enable debugging mode") parser.add_argument("-f", "--foreground", action = "store_true", help = "do not daemonize") parser.add_argument("--pidfile", help = "override default location of pid file") parser.add_argument("--profile", help = "enable profiling, saving data to PROFILE") + rpki.log.argparse_setup(parser) args = parser.parse_args() - rpki.log.init("irdbd", use_syslog = not args.debug) + rpki.log.init("irdbd", args) self.cfg = rpki.config.parser(args.config, "irdbd") self.cfg.set_global_flags() - if not args.foreground and not args.debug: + if not args.foreground: rpki.daemonize.daemon(pidfile = args.pidfile) if args.profile: diff --git a/rpki/log.py b/rpki/log.py index 9f59444f..4c4a444c 100644 --- a/rpki/log.py +++ b/rpki/log.py @@ -26,6 +26,7 @@ import sys import time import logging import logging.handlers +import argparse import traceback as tb try: @@ -67,36 +68,101 @@ use_setproctitle = True proctitle_extra = os.path.basename(os.getcwd()) -def init(ident = "rpki", use_syslog = True): +def argparse_setup(parser): + """ + Set up argparse stuff for functionality in this module. + + Default logging destination is syslog, but also see rpki.log.init(). + """ + + class RotatingFile(argparse.Action): + def __call__(self, parser, namespace, values, option_string = None): + setattr(namespace, self.dest, values[0]) + setattr(namespace, self.dest + "_maxBytes", int(values[1])) + setattr(namespace, self.dest + "_backupCount", int(values[2])) + if len(values) > 3: + raise ValueError + + class TimedRotatingFile(argparse.Action): + def __call__(self, parser, namespace, values, option_string = None): + setattr(namespace, self.dest, values[0]) + setattr(namespace, self.dest + "_interval", int(values[1])) + setattr(namespace, self.dest + "_backupCount", int(values[2])) + if len(values) > 3: + raise ValueError + + parser.add_argument("--log-level", default = logging.DEBUG, + choices = ("debug", "info", "warning", "error", "critical"), + type = lambda s: int(getattr(logging, s.upper())), + help = "how verbosely to log") + group = parser.add_mutually_exclusive_group() + group.add_argument("--log-syslog", nargs = "?", default = "daemon", + choices = sorted(logging.handlers.SysLogHandler.facility_names.keys()), + help = "send logging to syslog") + group.add_argument("--log-stderr", dest = "log_stream", action = "store_const", const = sys.stderr, + help = "send logging to standard error") + group.add_argument("--log-stdout", dest = "log_stream", action = "store_const", const = sys.stdout, + help = "send logging to standard output") + group.add_argument("--log-file", + help = "send logging to a plain old file") + group.add_argument("--log-rotating-file", action = RotatingFile, + nargs = 3, metavar = ("FILENAME", "KBYTES", "COUNT"), + help = "send logging to rotating file") + group.add_argument("--log-timed-rotating-file", action = TimedRotatingFile, + nargs = 3, metavar = ("FILENAME", "HOURS", "COUNT"), + help = "send logging to timed rotating file") + + +def init(ident = "rpki", args = argparse.Namespace(log_level = logging.DEBUG, log_stream = sys.stderr)): """ Initialize logging system. + + Default logging destination is syslog if "args" is specified, stderr otherwise. """ - # This will want tweaking after basic conversion to logging package - # is finished. For now, keep it simple. - # - # Should also support LoggingAdapters, rotating log files, - # configurable log levels, and other forms of entertainment. + assert isinstance(args, argparse.Namespace) - format = ident + "[%(process)d] %(message)s" - if not use_syslog: - format = "%(asctime)s " + format + if args.log_stream: + handler = logging.StreamHandler(stream = args.log_stream) - formatter = logging.Formatter(format, "%Y-%m-%dT%H:%M:%SZ") - formatter.converter = time.gmtime + elif args.log_file: + handler = logging.FileHandler(filename = args.log_file) + + elif args.log_rotating_file: + handler = logging.handlers.RotatingFileHandler( + filename = args.log_rotating_file, + maxBytes = args.log_rotating_file_maxBytes, + backupCount = args.log_rotating_file_backupCount) + + elif args.log_timed_rotating_file: + handler = logging.handlers.TimedRotatingFileHandler( + filename = args.log_timed_rotating_file, + interval = args.log_timed_rotating_file_interval, + backupCount = args.log_timed_rotating_file_backupCount) + + elif args.log_syslog: + handler = logging.handlers.SysLogHandler( + address = "/dev/log" if os.path.exists("/dev/log") else ("localhost", logging.handlers.SYSLOG_UDP_PORT), + facility = args.log_syslog) - if not use_syslog: - handler = logging.StreamHandler() - elif os.path.exists("/dev/log"): - handler = logging.handlers.SysLogHandler("/dev/log") else: - handler = logging.handlers.SysLogHandler() + raise ValueError + + format = ident + "[%(process)d]: %(message)s" + if not isinstance(handler, logging.handlers.SysLogHandler): + format = "%(asctime)s " + format + + # At some point we will probably want our own subclass of + # logging.Formatter so we can support LoggingAdapters with extra + # fields, but this suffices for the moment. + formatter = logging.Formatter(format, "%Y-%m-%d %H:%M:%S") + formatter.converter = time.gmtime handler.setFormatter(formatter) - logging.root.addHandler(handler) - #logging.root.setLevel(args.log_level) - logging.root.setLevel(logging.DEBUG) + root_logger = logging.getLogger() + root_logger.addHandler(handler) + root_logger.setLevel(args.log_level) if ident and have_setproctitle and use_setproctitle: if proctitle_extra: diff --git a/rpki/old_irdbd.py b/rpki/old_irdbd.py index 41060344..eb901f5d 100644 --- a/rpki/old_irdbd.py +++ b/rpki/old_irdbd.py @@ -285,11 +285,12 @@ class main(object): parser = argparse.ArgumentParser(description = __doc__) parser.add_argument("-c", "--config", help = "override default location of configuration file") - parser.add_argument("-d", "--debug", action = "store_true", - help = "enable debugging mode") + parser.add_argument("-f", "--foreground", action = "store_true", + help = "do not daemonize (ignored, old_irdbd never daemonizes)") + rpki.log.argparse_setup(parser) args = parser.parse_args() - rpki.log.init("irdbd", use_syslog = not args.debug) + rpki.log.init("irdbd", args) self.cfg = rpki.config.parser(args.config, "irdbd") diff --git a/rpki/pubd.py b/rpki/pubd.py index 31f22ed4..ec7be81e 100644 --- a/rpki/pubd.py +++ b/rpki/pubd.py @@ -53,24 +53,23 @@ class main(object): parser = argparse.ArgumentParser(description = __doc__) parser.add_argument("-c", "--config", help = "override default location of configuration file") - parser.add_argument("-d", "--debug", action = "store_true", - help = "enable debugging mode") parser.add_argument("-f", "--foreground", action = "store_true", help = "do not daemonize") parser.add_argument("--pidfile", help = "override default location of pid file") parser.add_argument("--profile", help = "enable profiling, saving data to PROFILE") + rpki.log.argparse_setup(parser) args = parser.parse_args() self.profile = args.profile - rpki.log.init("pubd", use_syslog = not args.debug) + rpki.log.init("pubd", args) self.cfg = rpki.config.parser(args.config, "pubd") self.cfg.set_global_flags() - if not args.foreground and not args.debug: + if not args.foreground: rpki.daemonize.daemon(pidfile = args.pidfile) if self.profile: diff --git a/rpki/rootd.py b/rpki/rootd.py index 43e84873..1b6beb55 100644 --- a/rpki/rootd.py +++ b/rpki/rootd.py @@ -336,20 +336,19 @@ class main(object): parser = argparse.ArgumentParser(description = __doc__) parser.add_argument("-c", "--config", help = "override default location of configuration file") - parser.add_argument("-d", "--debug", action = "store_true", - help = "enable debugging mode") parser.add_argument("-f", "--foreground", action = "store_true", help = "do not daemonize") parser.add_argument("--pidfile", help = "override default location of pid file") + rpki.log.argparse_setup(parser) args = parser.parse_args() - rpki.log.init("rootd", use_syslog = not args.debug) + rpki.log.init("rootd", args) self.cfg = rpki.config.parser(args.config, "rootd") self.cfg.set_global_flags() - if not args.foreground and not args.debug: + if not args.foreground: rpki.daemonize.daemon(pidfile = args.pidfile) self.bpki_ta = rpki.x509.X509(Auto_update = self.cfg.get("bpki-ta")) diff --git a/rpki/rpkic.py b/rpki/rpkic.py index d5339f5b..e01eeae2 100644 --- a/rpki/rpkic.py +++ b/rpki/rpkic.py @@ -111,7 +111,7 @@ class main(Cmd): self.main(args) def main(self, args): - rpki.log.init("rpkic", use_syslog = False) + rpki.log.init("rpkic") self.read_config() if self.interactive: Cmd.__init__(self) diff --git a/rpki/rpkid.py b/rpki/rpkid.py index 5546a02b..d0918b3c 100644 --- a/rpki/rpkid.py +++ b/rpki/rpkid.py @@ -60,24 +60,23 @@ class main(object): parser = argparse.ArgumentParser(description = __doc__) parser.add_argument("-c", "--config", help = "override default location of configuration file") - parser.add_argument("-d", "--debug", action = "store_true", - help = "enable debugging mode") parser.add_argument("-f", "--foreground", action = "store_true", help = "do not daemonize") parser.add_argument("--pidfile", help = "override default location of pid file") parser.add_argument("--profile", help = "enable profiling, saving data to PROFILE") + rpki.log.argparse_setup(parser) args = parser.parse_args() self.profile = args.profile - rpki.log.init("rpkid", use_syslog = not args.debug) + rpki.log.init("rpkid", args) self.cfg = rpki.config.parser(args.config, "rpkid") self.cfg.set_global_flags() - if not args.foreground and not args.debug: + if not args.foreground: rpki.daemonize.daemon(pidfile = args.pidfile) if self.profile: |