Logging¶
Most C-PAC logging is handled by the built-in Python logging
library. When logging, take care to choose an appropriate getLogger
function or method. While CPAC.utils.monitoring.custom_logging.getLogger
and nipype.utils.logger.Logging.getLogger
each fall back on logging.getLogger
,
each have their own intended use cases.
Loggers are singletons that are never freed during a script execution, and so creating lots of loggers will use up memory which can’t then be freed.
CPAC.utils.monitoring.custom_logging.getLogger
will look for a CPAC.utils.monitoring.custom_logging.MockLogger
before falling back on logging.getLogger
.
A CPAC.utils.monitoring.custom_logging.MockLogger
can be used in place of a logging.Logger
and deleted from memory when no longer needed. For an example, see how missing_log
is created and deleted in CPAC.pipeline.check_outputs.check_outputs
.
nipype.utils.logger.Logging.getLogger
will only consider loggers that are part of the class instance calling the method.
- CPAC.utils.monitoring.custom_logging.getLogger(name)[source]¶
Get a mock logger if one exists, falling back on real loggers.
- Parameters:
name (
str
)- Returns:
logger
- Return type:
CPAC.utils.monitoring.custom_logging.MockLogger
orlogging.Logger
- class CPAC.utils.monitoring.custom_logging.MockLogger(name, filename, level, log_dir)[source]¶
Mock logging.Logger to provide API without keeping the logger in memory.
- critical(*items, exc_info=False)¶
Log a message if logging level >= critical. See Logging Levels for a list of levels.
- debug(*items, exc_info=False)¶
Log a message if logging level >= debug. See Logging Levels for a list of levels.
- error(*items, exc_info=False)¶
Log a message if logging level >= error. See Logging Levels for a list of levels.
- exception(msg, *args, exc_info=True, **kwargs)[source]¶
Log a message with severity ‘ERROR’ on the root logger, with exception information. If the logger has no handlers, basicConfig() is called to add a console handler with a pre-defined format.
- info(*items, exc_info=False)¶
Log a message if logging level >= info. See Logging Levels for a list of levels.
- warning(*items, exc_info=False)¶
Log a message if logging level >= warning. See Logging Levels for a list of levels.
- logging.getLogger(name=None)[source]¶
Return a logger with the specified name, creating it if necessary.
If no name is specified, return the root logger.
Logging subprocess.check_outputs
¶
- CPAC.utils.monitoring.custom_logging.log_subprocess(cmd, *args, raise_error=True, **kwargs)[source]¶
Pass STDERR and STDOUT from subprocess to interface’s logger.
This function is nearly a drop-in replacement for subprocess.check_output.
Caveat: if you’re assigning to a variable (like
>>> output = subprocess.check_output(cmd)
), the new function also returns the command’s exit code, so you can just assign that to a throwaway variable if you don’t want it
>>> output, _ = log_subprocess(cmd)
or subscript the command like
>>> output = log_subprocess(cmd)[0]
. If you’re not assigning to a variable, it doesn’t matter and just
>>> log_subprocess(cmd)
should work just like
>>> subprocess.check_output(cmd)