diff --git a/artiq/frontend/pdq2_client.py b/artiq/frontend/pdq2_client.py index 598f7f461..bad6d87b4 100755 --- a/artiq/frontend/pdq2_client.py +++ b/artiq/frontend/pdq2_client.py @@ -33,7 +33,7 @@ def get_argparser(): parser.add_argument("-t", "--times", default="np.arange(5)*1e-6", help="sample times (s) [%(default)s]") - parser.add_argument("-v", "--voltages", + parser.add_argument("-u", "--voltages", default="(1-np.cos(t/t[-1]*2*np.pi))/2", help="sample voltages (V) [%(default)s]") parser.add_argument("-o", "--order", default=3, type=int, diff --git a/artiq/tools.py b/artiq/tools.py index f65eff03b..fb049f835 100644 --- a/artiq/tools.py +++ b/artiq/tools.py @@ -37,4 +37,4 @@ def verbosity_args(parser): def init_logger(args): - logging.basicConfig(level=logging.INFO + args.quiet*10 - args.verbose*10) + logging.basicConfig(level=logging.WARNING + args.quiet*10 - args.verbose*10) diff --git a/doc/manual/writing_a_driver.rst b/doc/manual/writing_a_driver.rst index c44c54e07..4fe512f0e 100644 --- a/doc/manual/writing_a_driver.rst +++ b/doc/manual/writing_a_driver.rst @@ -115,32 +115,33 @@ Logging and error handling in controllers Unrecoverable errors (such as the hardware being unplugged) should cause timely termination of the controller, in order to notify the controller manager which may try to restart the controller later according to its policy. Throwing an exception and letting it propagate is the preferred way of reporting an unrecoverable error. -For the debug, information and warning messages, use the ``logging`` Python module and print the log on the standard error output (the default setting). The logging level should be configurable with a command line option called ``--log`` that takes a string (debug, info, ...) representing the logging level. +For the debug, information and warning messages, use the ``logging`` Python module and print the log on the standard error output (the default setting). The logging level is by default "WARNING", meaning that only warning messages and more critical messages will get printed (and no debug nor information messages). By calling the ``verbosity_args()`` with the parser as argument, you add support for the ``--verbose`` (``-v``) and ``--quiet`` (``-q``) arguments in the parser. Each occurence of ``-v`` (resp. ``-q``) in the arguments will increase (resp. decrease) the log level of the logging module. For instance, if only one ``-v`` is present in the arguments, then more messages (info, warning and above) will get printed. If only one ``-q`` is present in the arguments, then only errors and critical messages will get printed. If ``-qq`` is present in the arguments, then only critical messages will get printed, but no debug/info/warning/error. The program below exemplifies how to use logging: :: import argparse import logging + from artiq.tools import verbosity_args, init_logger def get_argparser(): parser = argparse.ArgumentParser(description="Logging example") - parser.add_argument("--log", type=str, default="WARNING", - help="set log level") + parser.add_argument("--someargument", + help="some argument") + # [...] + verbosity_args(parser) # This adds the -q and -v handling return parser def main(): args = get_argparser().parse_args() - - numeric_level = getattr(logging, args.log.upper(), None) - if not isinstance(numeric_level, int): - raise ValueError("Invalid log level: " + args.log) - logging.basicConfig(level=numeric_level) + init_logger(args) # This initializes logging system log level according to -v/-q args logging.debug("this is a debug message") logging.info("this is an info message") logging.warning("this is a warning message") + logging.error("this is an error message") + logging.critical("this is a critical message") if __name__ == "__main__": main()