Table Of Contents

Previous topic

Error handling and Debugging

Next topic

Processors

Initialization, Finalization and Logging

Initialization

The Speect Engine is initialized when the Speect module is imported (see Initialization for the details of the Speect Engine C initialization):

import speect

Note

When using Speect from a built tree one must tell Python where to find the Speect Python bindings, see the installation documentation.

Finalization

There is no finalization method for Speect as the destruction of modules and objects in modules is done in random order (in Python), which may cause destructors to fail when they depend on other objects (even functions) or modules.

Logging

When imported the Speect Engine Error handling and Debugging mechanism does logging based on the CMAKE_BUILD_TYPE definition:

  • if Debug then logging will be written to the stderr stream, otherwise
  • no logging will be done.

If the Speect Engine error handling mechanism is active (see Error handling and Debugging in Python), then a Python logger instance of the type logging.Logger can be given to Speect to log errors, warnings and debug messages to (speect.setLogger()). The Speect Engine debugging level is set to S_DBG_ALL and all logging events are passed on to the Python logger, which can filter the logging messages based on the level. The Speect s_log_event levels are converted to Python logging levels as in the table below:

Speect Python
S_FATAL_EVENT logging.CRITICAL
S_ERROR_EVENT logging.ERROR
S_WARN_EVENT logging.WARNING
S_INFO_EVENT logging.INFO
S_DEBUG_EVENT logging.DEBUG
S_TRACE_EVENT logging.DEBUG

The logger fills the logging info dictionary with the following key-value pairs:

Key Value
se_event String value of the log event level (s_log_event_str())
se_function Function name where error occurred or “unknown”
se_file File name where error occurred or “unknown”
se_line Line number where error occurred or “unknown”
se_user_msg User message (message in context setting macros)

Example

An example Python logging configuration (see Python documentation on configuration file formats for the logging.fileConfig() method) is given in Python logging configuration example and can be used as follows:

import speect
import logging
import logging.config

# read config file
logging.config.fileConfig("spct_python_log.conf")

# create the logger instance
logger = logging.getLogger("SpeectEngine")

# pass it to speect
speect.setLogger(logger)