コード例 #1
0
def logprint(logname, category, level='INFO', backupCount=15):
    """
        Print logs by datetime.

        logname
          string, file name
        category
          string, category path of logs file in log directory
        level
          string, restrict whether logs to be printed or not
        backupCount
          int, how many backups can be reserved
        
    """
    path = os.path.join(CFG.dir, category.strip('/'), logname.strip('/') + '.log')
    print "log path:", path
    if not os.path.exists(path[:path.rindex('/')]):
        os.makedirs(path[:path.rindex('/')])
    # Initialize logger
    logger = logging.getLogger(logname)
    frt = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

    hdr = logging.StreamHandler(sys.stdout)
    hdr.setFormatter(frt)
    hdr._name = '##_sh_##'
    if not hdr._name in CFG.exist:
        logger.addHandler(hdr)
        CFG.exist.append(hdr._name)

    hdr = TimedRotatingFileHandler(path, 'D', 1, backupCount)
    hdr.setFormatter(frt)
    hdr._name = '##_rfh_##'
    if not hdr._name in CFG.exist:
        logger.addHandler(hdr)
        CFG.exist.append(hdr._name)


    if level.upper() == 'NOTEST':
        level == logging.NOTSET
    elif level.upper() == 'DEBUG':
        level == logging.DEBUG
    elif level.upper() == 'WARNING':
        level == logging.WARNING
    elif level.upper() == 'ERROR':
        level == logging.ERROR
    elif level.upper() == 'CRITICAL':
        level == logging.CRITICAL
    else:
        level == logging.INFO
    logger.setLevel(level)

    def _wraper(*args, **kwargs):
        if not CFG.debug:
            return
        if not args:
            return
            
        for hdr in CFG.handlers:
            if not hdr._name in CFG.exist:
                logger.addHandler(hdr)
                CFG.exist.append(hdr._name)

        encoding = 'utf8' if os.name == 'posix' else 'gbk'
        args = [_cu(a, encoding) for a in args]

        prefix = ''

        pl = kwargs.get('printlevel', 'info').upper()
        if pl == 'DEBUG':
            try:
                logger.debug('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        elif pl == 'WARNING':
            try:
                logger.warning('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        elif pl == 'ERROR':
            try:
                logger.error('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        elif pl == 'CRITICAL':
            try:
                logger.critical('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        else:
            try:
                logger.info('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
    return _wraper, logger
コード例 #2
0
def logprint(logname, category, level='INFO', backupCount=15):
    """
        Print logs by datetime.

        logname
          string, file name
        category
          string, category path of logs file in log directory
        level
          string, restrict whether logs to be printed or not
        backupCount
          int, how many backups can be reserved
        
    """
    path = os.path.join(CFG.dir, category.strip('/'),
                        logname.strip('/') + '.log')
    print "log path:", path
    if not os.path.exists(path[:path.rindex('/')]):
        os.makedirs(path[:path.rindex('/')])
    # Initialize logger
    logger = logging.getLogger(logname)
    frt = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

    hdr = logging.StreamHandler(sys.stdout)
    hdr.setFormatter(frt)
    hdr._name = '##_sh_##'
    if not hdr._name in CFG.exist:
        logger.addHandler(hdr)
        CFG.exist.append(hdr._name)

    hdr = TimedRotatingFileHandler(path, 'D', 1, backupCount)
    hdr.setFormatter(frt)
    hdr._name = '##_rfh_##'
    if not hdr._name in CFG.exist:
        logger.addHandler(hdr)
        CFG.exist.append(hdr._name)

    if level.upper() == 'NOTEST':
        level == logging.NOTSET
    elif level.upper() == 'DEBUG':
        level == logging.DEBUG
    elif level.upper() == 'WARNING':
        level == logging.WARNING
    elif level.upper() == 'ERROR':
        level == logging.ERROR
    elif level.upper() == 'CRITICAL':
        level == logging.CRITICAL
    else:
        level == logging.INFO
    logger.setLevel(level)

    def _wraper(*args, **kwargs):
        if not CFG.debug:
            return
        if not args:
            return

        for hdr in CFG.handlers:
            if not hdr._name in CFG.exist:
                logger.addHandler(hdr)
                CFG.exist.append(hdr._name)

        encoding = 'utf8' if os.name == 'posix' else 'gbk'
        args = [_cu(a, encoding) for a in args]

        prefix = ''

        pl = kwargs.get('printlevel', 'info').upper()
        if pl == 'DEBUG':
            try:
                logger.debug('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        elif pl == 'WARNING':
            try:
                logger.warning('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        elif pl == 'ERROR':
            try:
                logger.error('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        elif pl == 'CRITICAL':
            try:
                logger.critical('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        else:
            try:
                logger.info('', *args, **kwargs)
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)

    return _wraper, logger
コード例 #3
0
ファイル: prettyprint.py プロジェクト: shuxiang/pyweb-utils
def logprint(logname, category, level='INFO', maxBytes=1024*10124*100,
             backupCount=15, to_stdout=True, sentrykey=''):
    """
        生成日志输出的方法和对象
        @param logname 日志名称
        @param category 日志路径
        @param level 日志输出级别 (可选)
        @param maxBytes 日志单次输出最大长度 (可选)
        @param backupCount 日志轮询备份记录 (可选)
        @param to_stdout 是否屏幕输出 (可选)
        @param sentrykey 输送到sentry的配置 (可选)
        @return _wraper 返回日志方法
        @return logger 返回日志对象
    """
    path = os.path.join(LOGDIR, category, logname + '.log')
    print "log path:", path
    if not os.path.exists(path[:path.rindex('/')]):
        os.makedirs(path[:path.rindex('/')])

    # Initialize logger
    logger = logging.getLogger(logname)
    # frt = logging.Formatter('%(message)s')
    frt = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    hdr = None
    if path:
        # hdr = RotatingFileHandler(path, 'a', maxBytes, backupCount, 'utf-8')
        hdr = TimedRotatingFileHandler(path, 'D', 1, backupCount)
        hdr.suffix = "%Y%m%d"
        hdr.setFormatter(frt)
        hdr._name = logname + '_p'
        already_in = False
        for _hdr in logger.handlers:
            if _hdr._name == logname + '_p':
                already_in = True
                break
        if not already_in:
            logger.addHandler(hdr)
    if to_stdout:
        hdr = logging.StreamHandler(sys.stdout)
        hdr.setFormatter(frt)
        hdr._name = logname + '_s'
        already_in = False
        for _hdr in logger.handlers:
            if _hdr._name == logname + '_s':
                already_in = True
        if not already_in:
            logger.addHandler(hdr)
    if level == 'NOTEST':
        level == logging.NOTSET
    elif level == 'DEBUG':
        level == logging.DEBUG
    elif level == 'WARNING':
        level == logging.WARNING
    elif level == 'ERROR':
        level == logging.ERROR
    elif level == 'CRITICAL':
        level == logging.CRITICAL
    else:
        level == logging.INFO
    logger.setLevel(level)

    sentrykey = sentrykey.strip()
    print 'see sentry: ', sentrykey # hdr = SentryHandler('http://*****:*****@111.innapp.cn:9090/3')
    if not sentrykey == '':
        if not '?' in sentrykey:
            sentrykey = sentrykey + '?timeout=' + str(TIMEOUT)
        elif not 'timeout=' in sentrykey.split('?')[-1]:
            sentrykey = sentrykey + '&timeout=' + str(TIMEOUT)
    hdr = SentryHandler(sentrykey)
    # setup_logging(hdr)
    # logger.addHandler(hdr)

    def _wraper(*args, **kwargs):
        if not LOGDEBUG:
            return
        if not args:
            return
        encoding = 'utf8' if os.name == 'posix' else 'gbk'
        args = [_cu(a, encoding) for a in args]
        f_back = None
        try:
            raise Exception
        except:
            f_back = sys.exc_traceback.tb_frame.f_back
        f_name = f_back.f_code.co_name
        filename = os.path.basename(f_back.f_code.co_filename)
        m_name = os.path.splitext(filename)[0]
        prefix = (u'[%s.%s]' % (m_name, f_name)).ljust(20, ' ')
        s = kwargs.get('to_sentry', False)
        if s and not sentrykey == '':
            logger.addHandler(hdr)
        else:
            logger.removeHandler(hdr)
        l = kwargs.get('printlevel', 'info').upper()
        if l == 'DEBUG':
            try:
                logger.debug(u' '.join([prefix,
                     ' '.join(args)]))
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        elif l == 'WARNING':
            try:
                logger.warning(u' '.join([prefix,
                     ' '.join(args)]))
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        elif l == 'ERROR':
            try:
                logger.error(u' '.join([prefix,
                         ' '.join(args)]))
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        elif l == 'CRITICAL':
            try:
                logger.critical(u' '.join([prefix,
                     ' '.join(args)]))
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
        else:
            try:
                logger.info(u' '.join([prefix,
                     ' '.join(args)]))
            except:
                t, v, b = sys.exc_info()
                err_messages = traceback.format_exception(t, v, b)
                print 'Error: %s' % ','.join(err_messages)
    return _wraper, logger