Skip to content

logger

Runtime-backed logging for pyRevit.

Attributes

DEFAULT_LOGGING_LEVEL = logging.WARNING module-attribute

DEPRECATE_LOG_LEVEL = 25 module-attribute

SUCCESS_LOG_LEVEL = 80 module-attribute

loggers = {} module-attribute

Classes

LoggerWrapper(name)

Bases: object

Small Python facade over the active runtime logging service.

Source code in pyrevitlib/pyrevit/coreutils/logger.py
def __init__(self, name):
    self.name = name

Attributes

name = name instance-attribute
warn = warning class-attribute instance-attribute

Functions

debug(message, *args, **kwargs)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def debug(self, message, *args, **kwargs):
    self._emit(logging.DEBUG, message, args)
info(message, *args, **kwargs)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def info(self, message, *args, **kwargs):
    self._emit(logging.INFO, message, args)
warning(message, *args, **kwargs)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def warning(self, message, *args, **kwargs):
    self._emit(logging.WARNING, message, args)
error(message, *args, **kwargs)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def error(self, message, *args, **kwargs):
    exception_text = _format_current_exception() \
        if kwargs.get('exc_info') else ''
    self._emit(logging.ERROR, message, args, exception_text)
exception(message, *args, **kwargs)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def exception(self, message, *args, **kwargs):
    self._emit(logging.ERROR, message, args, _format_current_exception())
critical(message, *args, **kwargs)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def critical(self, message, *args, **kwargs):
    self._emit(logging.CRITICAL, message, args)
success(message, *args, **kwargs)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def success(self, message, *args, **kwargs):
    self._emit(SUCCESS_LOG_LEVEL, message, args)
deprecate(message, *args, **kwargs)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def deprecate(self, message, *args, **kwargs):
    self._emit(DEPRECATE_LOG_LEVEL, message, args)
isEnabledFor(level)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def isEnabledFor(self, level):
    service = _resolve_service()
    if service is None:
        return False
    try:
        return bool(service.IsEnabled(int(level)))
    except Exception:
        return False
is_enabled_for(level)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def is_enabled_for(self, level):
    service = _resolve_service()
    if service is None:
        return False
    try:
        return bool(service.IsVisibleEnabled(int(level)))
    except Exception:
        return False
has_errors()
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def has_errors(self):
    service = _resolve_service()
    if service is None:
        return False
    try:
        return bool(service.HasErrors)
    except Exception:
        return False
set_level(level)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def set_level(self, level):
    service = _resolve_service()
    if service is not None:
        service.SetMinimumLevel(int(level))
set_quiet_mode()
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def set_quiet_mode(self):
    self.set_level(logging.CRITICAL)
set_verbose_mode()
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def set_verbose_mode(self):
    self.set_level(logging.INFO)
set_debug_mode()
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def set_debug_mode(self):
    self.set_level(logging.DEBUG)
reset_level()
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def reset_level(self):
    self.set_level(DEFAULT_LOGGING_LEVEL)
get_level()
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def get_level(self):
    service = _resolve_service()
    if service is None:
        return DEFAULT_LOGGING_LEVEL
    try:
        return int(service.GetMinimumLevel())
    except Exception:
        return DEFAULT_LOGGING_LEVEL
log_parse_except(parsed_file, parse_ex)
Source code in pyrevitlib/pyrevit/coreutils/logger.py
def log_parse_except(self, parsed_file, parse_ex):
    err_msg = '<strong>Error while parsing file:</strong>\n{file}\n' \
              '<strong>Error type:</strong> {type}\n' \
              '<strong>Error Message:</strong> {errmsg}\n' \
              '<strong>Line/Column:</strong> {lineno}/{colno}\n' \
              '<strong>Line Text:</strong> {linetext}' \
              .format(file=parsed_file,
                      type=parse_ex.__class__.__name__,
                      errmsg=getattr(parse_ex, 'msg', ''),
                      lineno=getattr(parse_ex, 'lineno', 0),
                      colno=getattr(parse_ex, 'offset', 0),
                      linetext=getattr(parse_ex, 'text', ''))
    self.error(coreutils.prepare_html_str(err_msg))
dev_log(source, message='')

Append a command-specific developer note on the user's desktop.

Source code in pyrevitlib/pyrevit/coreutils/logger.py
def dev_log(self, source, message=''):
    """Append a command-specific developer note on the user's desktop."""
    devlog_fname = '{}.log'.format(
        EXEC_PARAMS.command_uniqueid or self.name)
    with io.open(op.join(USER_DESKTOP, devlog_fname), 'a', encoding='utf-8') \
            as devlog_file:
        devlog_file.write(
            '{tstamp} [{exid}] {src}: {msg}\n'.format(
                tstamp=EXEC_PARAMS.exec_timestamp,
                exid=EXEC_PARAMS.exec_id,
                src=_safe_text(source),
                msg=_safe_text(message)))

Functions

get_logger(logger_name)

Return the cached runtime-backed facade for logger_name.

Source code in pyrevitlib/pyrevit/coreutils/logger.py
def get_logger(logger_name):
    """Return the cached runtime-backed facade for ``logger_name``."""
    logger = loggers.get(logger_name)
    if logger is None:
        logger = LoggerWrapper(logger_name)
        loggers[logger_name] = logger
    return logger

set_file_logging(status)

Enable or disable the runtime-owned default log file.

Source code in pyrevitlib/pyrevit/coreutils/logger.py
def set_file_logging(status):
    """Enable or disable the runtime-owned default log file."""
    service = _resolve_service()
    if service is not None:
        service.SetFileLogging(bool(status))

loggers_have_errors()

Return whether the active runtime logging service recorded an error.

Source code in pyrevitlib/pyrevit/coreutils/logger.py
def loggers_have_errors():
    """Return whether the active runtime logging service recorded an error."""
    service = _resolve_service()
    if service is None:
        return False
    try:
        return bool(service.HasErrors)
    except Exception:
        return False

get_runtime_logfile_path()

Return the path of the current session's default runtime log file.

Resolved by the runtime logging service so callers always agree with where the file is actually written. Returns None if it can't be determined.

Source code in pyrevitlib/pyrevit/coreutils/logger.py
def get_runtime_logfile_path():
    """Return the path of the current session's default runtime log file.

    Resolved by the runtime logging service so callers always agree with where
    the file is actually written. Returns None if it can't be determined.
    """
    try:
        from pyrevit.runtime.types import ScriptLoggerService
        return ScriptLoggerService.GetDefaultLogFilePath() or None
    except Exception:
        return None