logger CLI
logger_CLI ¶
Module provides CLI logging facility. Logging is possible for CLI arguments and parsed arguments structure.
loggerCLI = setup_CLI_logger(loggerNameCLIlog) module-attribute ¶
loggerNameCLIlog = 'Log_Python_CLI' module-attribute ¶
logCLIargs() -> None ¶
logCLIargs - write command line interface parameters to specific CLI call log
Source code in src/utils_mystuff/logger_CLI.py
def logCLIargs() -> None:
"""
logCLIargs - write command line interface parameters to specific CLI call log
"""
if sys.argv[0] != "-c":
loggerCLI.info(f"Name Python script: {sys.argv[0]}")
else:
stack = inspect.stack()
loggerCLI.info(
f"Name Python script: {stack[len(inspect.stack()) - 2].filename} (retrieved from call stack because call using switch -c)"
)
argcount = len(sys.argv)
if argcount > 1:
for i in range(1, argcount):
loggerCLI.info(f"Arg {i}: {sys.argv[i]}")
loggerCLI.info(f"Number of args passed: {argcount - 1}")
else:
loggerCLI.info("No args passed.")
# loggerCLI.info("\n")
loggerCLI.newline()
logCLIparams(params) -> None ¶
logCLIparams - write parsed parameters to specific call log
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
params | _type_ | params | required |
Source code in src/utils_mystuff/logger_CLI.py
def logCLIparams(params) -> None:
"""
logCLIparams - write parsed parameters to specific call log
Args:
params (_type_): params
"""
loggerCLI.info("Parsed arguments (from command line or via parameter injected into parse_args):")
for param in vars(params): # params is NamespaceObject of type TapType and not iterable
if param in params.class_variables or param in params.argument_buffer:
loggerCLI.info(f"{param}: {getattr(params, param)}")
# loggerCLI.info("\n")
loggerCLI.newline()
log_cli_args() -> None ¶
log_cli_params(params) -> None ¶
log_cli_params - write parsed parameters to specific call log
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
params | _type_ | params | required |
setup_CLI_logger(loggerNameCLIlog: str, *, switch_via_handler: bool = False) -> logging.Logger ¶
setup_CLI_logger - encapsulated setup of CLI logger object
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
loggerNameCLIlog | str | name of logger. | required |
switch_via_handler | bool | define switching mode. Defaults to False. | False |
Returns:
| Name | Type | Description |
|---|---|---|
Logger | Logger | logger object |
Source code in src/utils_mystuff/logger_CLI.py
def setup_CLI_logger(loggerNameCLIlog: str, *, switch_via_handler: bool = False) -> logging.Logger:
"""
setup_CLI_logger - encapsulated setup of CLI logger object
Args:
loggerNameCLIlog (str): name of logger.
switch_via_handler (bool): define switching mode. Defaults to False.
Returns:
Logger: logger object
"""
# get logger
loggerCLI = logging.getLogger(loggerNameCLIlog)
# log file handler
# log_filehandler = logging.FileHandler(os.path.join(tempfile.gettempdir(), loggerNameCLIlog + "_Py.txt"))
# log formatter - normal & blank line
formatter_standard = logging.Formatter("%(asctime)s\t%(levelname)s\t%(message)s", datefmt="%d.%m.%Y %H:%M:%S")
formatter_blank = logging.Formatter(fmt="")
if switch_via_handler:
# log handler for normal log entries
# handlerCLI = log_filehandler
handlerCLI = logging.FileHandler(os.path.join(tempfile.gettempdir(), loggerNameCLIlog + "_Py.txt"))
handlerCLI.setFormatter(formatter_standard)
handlerCLI.setLevel(logging.INFO)
# log handler for blank lines
# loghandlerNewline = log_filehandler
handlerNewline = logging.FileHandler(os.path.join(tempfile.gettempdir(), loggerNameCLIlog + "_Py.txt"))
handlerNewline.setFormatter(formatter_blank)
handlerNewline.setLevel(logging.INFO)
# set handler for log object
loggerCLI.addHandler(handlerCLI)
loggerCLI.setLevel(logging.INFO)
# set own switching attributes
loggerCLI.handler_standard = handlerCLI
loggerCLI.handler_newline = handlerNewline
loggerCLI.newline = types.MethodType(_logger_newline_switch_handler, loggerCLI)
else:
handler = logging.FileHandler(os.path.join(tempfile.gettempdir(), loggerNameCLIlog + "_Py.txt"))
handler.setFormatter(formatter_standard)
handler.setLevel(logging.INFO)
# set handler for log object
loggerCLI.addHandler(handler)
loggerCLI.setLevel(logging.INFO)
# set own switching attributes
loggerCLI.handler = handler
loggerCLI.formatter_standard = formatter_standard
loggerCLI.formatter_blank = formatter_blank
loggerCLI.newline = types.MethodType(_logger_newline_switch_formatter, loggerCLI)
return loggerCLI