Logging

Cross-Process Logging

class pavilion.log_setup.LockFileRotatingFileHandler(file_name, max_bytes=0, backup_count=0, lock_timeout=10, encoding=None)

Bases: Handler

A logging handler that manages cross-system, cross-process safety by utilizing file based locking. This will also rotate files, as per RotatingFileHandler.

__init__(file_name, max_bytes=0, backup_count=0, lock_timeout=10, encoding=None)

Initialize the Locking File Handler. This will attempt to open the file and use the lockfile, just to check permissions.

Parameters
  • file_name (Union(str,Path)) – The path to the log file.

  • max_bytes (int) – The limit of how much data can go in a single log file before rolling over. Zero denotes no limit.

  • backup_count (int) – How many backups (logfile.1, etc) to keep.

  • lock_timeout (int) – Wait this long before declaring a lock deadlock, and giving up.

  • encoding (str) – The file encoding to use for the log file.

_do_rollover()

Roll over our log file. We must have a lock on the file to perform this.

_should_rollover(msg)

Check if the message will exceed our rollover limit.

emit(record)

Emit the given record, but only after acquiring a lock on the log’s lockfile.

handleError(record: LogRecord) None

Print any logging errors to stderr. We want to know about them.

Logger Setup

pavilion.log_setup.record_factory(*fargs, **kwargs)

Add the hostname to all logged records.

pavilion.log_setup.setup_loggers(pav_cfg) TextIO

Setup the loggers for the Pavilion command. This will include:

  • The general log file (as a multi-process/host safe rotating logger).

  • The result log file (also as a multi-process/host safe rotating logger).

  • The exception log.

The general log is also written to a returned StringIO() object.

Parameters

pav_cfg – The Pavilion configuration.