@contextlib.contextmanager
def syslog(ctx, config):
    '\n    start syslog / stop syslog on exit.\n    '
    if (ctx.archive is None):
        (yield)
        return
    log.info('Starting syslog monitoring...')
    archive_dir = misc.get_archive_dir(ctx)
    log_dir = '{adir}/syslog'.format(adir=archive_dir)
    run.wait(ctx.cluster.run(args=['mkdir', '-p', '-m0755', '--', log_dir], wait=False))
    CONF = '/etc/rsyslog.d/80-cephtest.conf'
    kern_log = '{log_dir}/kern.log'.format(log_dir=log_dir)
    misc_log = '{log_dir}/misc.log'.format(log_dir=log_dir)
    conf_lines = ['kern.* -{kern_log};RSYSLOG_FileFormat'.format(kern_log=kern_log), '*.*;kern.none -{misc_log};RSYSLOG_FileFormat'.format(misc_log=misc_log)]
    conf_fp = StringIO('\n'.join(conf_lines))
    try:
        for rem in ctx.cluster.remotes.iterkeys():
            log_context = 'system_u:object_r:var_log_t:s0'
            for log_path in (kern_log, misc_log):
                rem.run(args=('touch %s' % log_path))
                rem.chcon(log_path, log_context)
            misc.sudo_write_file(remote=rem, path=CONF, data=conf_fp)
            conf_fp.seek(0)
        run.wait(ctx.cluster.run(args=['sudo', 'service', 'rsyslog', 'restart'], wait=False))
        (yield)
    finally:
        log.info('Shutting down syslog monitoring...')
        run.wait(ctx.cluster.run(args=['sudo', 'rm', '-f', '--', CONF, run.Raw('&&'), 'sudo', 'service', 'rsyslog', 'restart'], wait=False))
        log.info('Checking logs for errors...')
        for rem in ctx.cluster.remotes.iterkeys():
            log.debug('Checking %s', rem.name)
            r = rem.run(args=['egrep', '--binary-files=text', '\\bBUG\\b|\\bINFO\\b|\\bDEADLOCK\\b', run.Raw('{adir}/syslog/*.log'.format(adir=archive_dir)), run.Raw('|'), 'grep', '-v', 'task .* blocked for more than .* seconds', run.Raw('|'), 'grep', '-v', 'lockdep is turned off', run.Raw('|'), 'grep', '-v', 'trying to register non-static key', run.Raw('|'), 'grep', '-v', 'DEBUG: fsize', run.Raw('|'), 'grep', '-v', 'CRON', run.Raw('|'), 'grep', '-v', 'BUG: bad unlock balance detected', run.Raw('|'), 'grep', '-v', 'inconsistent lock state', run.Raw('|'), 'grep', '-v', '*** DEADLOCK ***', run.Raw('|'), 'grep', '-v', 'INFO: possible irq lock inversion dependency detected', run.Raw('|'), 'grep', '-v', 'INFO: NMI handler (perf_event_nmi_handler) took too long to run', run.Raw('|'), 'grep', '-v', 'INFO: recovery required on readonly', run.Raw('|'), 'grep', '-v', 'ceph-create-keys: INFO', run.Raw('|'), 'egrep', '-v', '\\bsalt-master\\b|\\bsalt-minion\\b|\\bsalt-api\\b', run.Raw('|'), 'head', '-n', '1'], stdout=StringIO())
            stdout = r.stdout.getvalue()
            if (stdout != ''):
                log.error('Error in syslog on %s: %s', rem.name, stdout)
                set_status(ctx.summary, 'fail')
                if ('failure_reason' not in ctx.summary):
                    ctx.summary['failure_reason'] = "'{error}' in syslog".format(error=stdout)
        log.info('Compressing syslogs...')
        run.wait(ctx.cluster.run(args=['find', '{adir}/syslog'.format(adir=archive_dir), '-name', '*.log', '-print0', run.Raw('|'), 'sudo', 'xargs', '-0', '--no-run-if-empty', '--', 'gzip', '--'], wait=False))
start syslog / stop syslog on exit.
@contextlib.contextmanager
def syslog(ctx, config):
    '\n    \n    '
    if (ctx.archive is None):
        (yield)
        return
    log.info('Starting syslog monitoring...')
    archive_dir = misc.get_archive_dir(ctx)
    log_dir = '{adir}/syslog'.format(adir=archive_dir)
    run.wait(ctx.cluster.run(args=['mkdir', '-p', '-m0755', '--', log_dir], wait=False))
    CONF = '/etc/rsyslog.d/80-cephtest.conf'
    kern_log = '{log_dir}/kern.log'.format(log_dir=log_dir)
    misc_log = '{log_dir}/misc.log'.format(log_dir=log_dir)
    conf_lines = ['kern.* -{kern_log};RSYSLOG_FileFormat'.format(kern_log=kern_log), '*.*;kern.none -{misc_log};RSYSLOG_FileFormat'.format(misc_log=misc_log)]
    conf_fp = StringIO('\n'.join(conf_lines))
    try:
        for rem in ctx.cluster.remotes.iterkeys():
            log_context = 'system_u:object_r:var_log_t:s0'
            for log_path in (kern_log, misc_log):
                rem.run(args=('touch %s' % log_path))
                rem.chcon(log_path, log_context)
            misc.sudo_write_file(remote=rem, path=CONF, data=conf_fp)
            conf_fp.seek(0)
        run.wait(ctx.cluster.run(args=['sudo', 'service', 'rsyslog', 'restart'], wait=False))
        (yield)
    finally:
        log.info('Shutting down syslog monitoring...')
        run.wait(ctx.cluster.run(args=['sudo', 'rm', '-f', '--', CONF, run.Raw('&&'), 'sudo', 'service', 'rsyslog', 'restart'], wait=False))
        log.info('Checking logs for errors...')
        for rem in ctx.cluster.remotes.iterkeys():
            log.debug('Checking %s', rem.name)
            r = rem.run(args=['egrep', '--binary-files=text', '\\bBUG\\b|\\bINFO\\b|\\bDEADLOCK\\b', run.Raw('{adir}/syslog/*.log'.format(adir=archive_dir)), run.Raw('|'), 'grep', '-v', 'task .* blocked for more than .* seconds', run.Raw('|'), 'grep', '-v', 'lockdep is turned off', run.Raw('|'), 'grep', '-v', 'trying to register non-static key', run.Raw('|'), 'grep', '-v', 'DEBUG: fsize', run.Raw('|'), 'grep', '-v', 'CRON', run.Raw('|'), 'grep', '-v', 'BUG: bad unlock balance detected', run.Raw('|'), 'grep', '-v', 'inconsistent lock state', run.Raw('|'), 'grep', '-v', '*** DEADLOCK ***', run.Raw('|'), 'grep', '-v', 'INFO: possible irq lock inversion dependency detected', run.Raw('|'), 'grep', '-v', 'INFO: NMI handler (perf_event_nmi_handler) took too long to run', run.Raw('|'), 'grep', '-v', 'INFO: recovery required on readonly', run.Raw('|'), 'grep', '-v', 'ceph-create-keys: INFO', run.Raw('|'), 'egrep', '-v', '\\bsalt-master\\b|\\bsalt-minion\\b|\\bsalt-api\\b', run.Raw('|'), 'head', '-n', '1'], stdout=StringIO())
            stdout = r.stdout.getvalue()
            if (stdout != ):
                log.error('Error in syslog on %s: %s', rem.name, stdout)
                set_status(ctx.summary, 'fail')
                if ('failure_reason' not in ctx.summary):
                    ctx.summary['failure_reason'] = "'{error}' in syslog".format(error=stdout)
        log.info('Compressing syslogs...')
        run.wait(ctx.cluster.run(args=['find', '{adir}/syslog'.format(adir=archive_dir), '-name', '*.log', '-print0', run.Raw('|'), 'sudo', 'xargs', '-0', '--no-run-if-empty', '--', 'gzip', '--'], wait=False))