Tutorial
You are producing a CLI package that will use logmuse. Logmuse will provide command-line options to control logging, such as --verbosity
and --silent
. Here's how to set it up.
Imported packages
For any packages that are imported by your CLI package, all you have to do is follow the normal usage of the built-in logging
module. No need to use logmuse in imported packages. Just type, for example, something like:
_LOGGER = logging.getLogger(__name__)
At the top of each module, and then use _LOGGER.debug
or whatever in the module. That's it. The command line arguments passed via your CLI will control the imported packages as well. Make sure your package isn't making a root logger or something silly like that.
Your CLI package
Now, to use logmuse in your CLI package, including all imported loggers, all you have to do is:
1 Initialize
Just add to the __init__.py
file:
import logmuse
logmuse.init_logger(PACKAGE)
Where PACKAGE
is the name of your package. Now it will be set up with default parameters for your within-python-use. Remember, this is only for the CLI package. Do not add this code to client packages that do not implement CLIs.
2 Add CLI args
When you build your argparser, add the logmuse CLI options with this:
parser = logmuse.add_logging_options(parser)
This will give you:
--verbosity
--silent
--logdev
And your logger will automatically respond to these command-line arguments. (PS, pypiper uses logmuse to add these; so if you're using pypiper to add args, don't repeat).
3 Activate logmuse
At the top of your module file, say:
import logmuse
In your main
function say:
global _LOGGER
_LOGGER = logmuse.logger_via_cli(args, make_root=True)
Here, args
is the result of argparse.parse_args().
Old way
No need to read further. This is how it used to work, before it was awesome.
# Set the logging level.
if args.dbg:
# Debug mode takes precedence and will listen for all messages.
level = args.logging_level or logging.DEBUG
elif args.verbosity is not None:
# Verbosity-framed specification trumps logging_level.
level = _LEVEL_BY_VERBOSITY[args.verbosity]
else:
# Normally, we're not in debug mode, and there's no verbosity.
level = LOGGING_LEVEL
# Establish the project-root logger and attach one for this module.
logger_kwargs = {"level": level, "logfile": args.logfile, "devmode": args.dbg}
init_logger(name="peppy", **logger_kwargs)
init_logger(name="divvy", **logger_kwargs)
global _LOGGER
_LOGGER = init_logger(name=_PKGNAME, **logger_kwargs)
logger_kwargs = {"level": level, "logfile": args.logfile, "devmode": args.dbg}
init_logger(name="peppy", **logger_kwargs)
init_logger(name="divvy", **logger_kwargs)
We should move the logging level stuff into logmuse