Example #1
0
def setup_logging(app, logfile, debug=False):
    cmdslog = TimedRotatingFileHandler(logfile,
                                       when='D',
                                       interval=1,
                                       backupCount=7)
    if debug:
        env = logging.DEBUG
        cmdslog.setFormatter(logging.Formatter(
            "%(name)s: [%(levelname)s] %(filename)s:%(lineno)d - %(message)s"))
    else:
        env = logging.INFO
        cmdslog.setFormatter(logging.Formatter(
            "%(name)s: [%(levelname)s] %(message)s"))

    cmdslog.setLevel(env)

    logger = logging.getLogger(app)
    logger.setLevel(env)
    logger.addHandler(cmdslog)
    if os.path.exists('/dev/log'):
        st_mode = os.stat('/dev/log').st_mode
        if stat.S_ISSOCK(st_mode):
            syslog_h = SysLogHandler(address='/dev/log')
            syslog_h.set_name(app)
            logger.addHandler(syslog_h)

    return _log(app, logger)
def syslog_handler(
    host: Optional[str] = 'localhost',
    facility: Optional[str] = 'user',
    formatter: Optional[logging.Formatter] = None,
    # in 3.8 Literal[] could be used
    level: Optional[str] = 'INFO',
    name: Optional[str] = 'sh',
    port: Optional[int] = 514,
    # in 3.8 Literal[] could be used
    socktype: Optional[str] = 'UDP',
) -> SysLogHandler:
    """Return a configured instance of a syslog handler with sane defaults.

    Args:
        host: The syslog hostname/ip.
        facility: The syslog facility.
        formatter: A logging formatter to format logging handler.
            Defaults to a sane formatter with module/lineno.
        level: The logging level for the handler.
        name: The handler name.
        port: The syslog port.
        socktype: The socket type. Either TCP or UDP.

    Returns:
        SyslogHandler: A configured instance of the SyslogHandler.
    """
    # build address from host and port
    address = (host, int(port))

    # set socktype
    if socktype.upper() == 'TCP':
        socktype = socket.SOCK_STREAM
    elif socktype.upper() == 'UDP':
        socktype = socket.SOCK_DGRAM  # default
    else:  # pragma: no cover
        raise RuntimeError(f'{socktype} is not a valid socktype.')

    # create the handler
    lh = SysLogHandler(address=address, facility=facility, socktype=socktype)
    lh.setLevel(get_level(level.upper()))
    if formatter is None:
        formatter = logging.Formatter(
            '%(asctime)s - %(name)s - %(levelname)s - %(message)s '
            '[%(module)s:%(funcName)s:%(lineno)d]')
    lh.setFormatter(formatter)
    lh.set_name(name)

    return lh
Example #3
0
def setup_logging(app, logfile, debug=True):
    old_factory = logging.getLogRecordFactory()

    def spell_record_factory(*args, **kwargs):
        record = old_factory(*args, **kwargs)
        if record.name != 'conjure-up':
            record.filename = '{}: {}'.format(record.name, record.filename)
        spell_name = app.config.get('spell', consts.UNSPECIFIED_SPELL)
        record.name = 'conjure-up/{}'.format(spell_name)
        return record

    logging.setLogRecordFactory(spell_record_factory)

    cmdslog = TimedRotatingFileHandler(logfile,
                                       when='D',
                                       interval=1,
                                       backupCount=7)
    cmdslog.setFormatter(
        logging.Formatter("%(asctime)s [%(levelname)s] %(name)s - "
                          "%(filename)s:%(lineno)d - %(message)s"))

    root_logger = logging.getLogger()
    app_logger = logging.getLogger('conjure-up')

    if debug:
        app_logger.setLevel(logging.DEBUG)
        root_logger.setLevel(logging.DEBUG)
    else:
        # always use DEBUG level for app, for now
        app_logger.setLevel(logging.DEBUG)
        root_logger.setLevel(logging.INFO)

    root_logger.addHandler(cmdslog)
    if os.path.exists('/dev/log'):
        st_mode = os.stat('/dev/log').st_mode
        if stat.S_ISSOCK(st_mode):
            syslog_h = SysLogHandler(address='/dev/log')
            syslog_h.set_name('conjure-up')
            app_logger.addHandler(syslog_h)

    return app_logger