Exemple #1
0
class RotatingFileLogger(JSONLogger):
    """RotatingFileLogger

  The :class:`RotatingFileLogger` JSON logs SBP messages to a rotating
  file handler that's turned over at a specified time interval
  (defaults to 30 minutes). Intended to be a very low-overhead,
  cross-platform rolling logger for field testing.

  Parameters
  ----------
  filename : string
    Path to file to write SBP messages to.
  when : str
    Specifies a type of interval
  interval : int
    Specifies length of interval
  backupCount : int
    Number of backups to keep around
  tags : dict
    Tags to add to SBP message envelope
  dispatcher: dict
    SBP dispatch table

  """
    def __init__(self,
                 filename,
                 when='M',
                 interval=30,
                 backupCount=3,
                 tags={},
                 dispatcher=dispatch):
        self.handler = TimedRotatingFileHandler(filename, when, interval,
                                                backupCount)
        self.logger = logging.getLogger("Rotating Log")
        self.logger.setLevel(logging.INFO)
        self.logger.addHandler(_mk_async_emit(self.handler))
        self.dispatcher = dispatcher
        self.base_time = time.time()
        self.tags = tags

    def __call__(self, msg):
        self.call(msg)

    def flush(self):
        self.handler.flush()

    def close(self):
        self.handler.close()

    def call(self, msg):
        self.logger.info(self.dump(msg))
Exemple #2
0
class RotatingFileLogger(JSONLogger):
    """RotatingFileLogger

    The :class:`RotatingFileLogger` JSON logs SBP messages to a rotating
    file handler that's turned over at a specified time interval
    (defaults to 30 minutes). Intended to be a very low-overhead,
    cross-platform rolling logger for field testing.

    Parameters
    ----------
    filename : string
      Path to file to write SBP messages to.
    when : str
      Specifies a type of interval
    interval : int
      Specifies length of interval
    backupCount : int
      Number of backups to keep around
    tags : dict
      Tags to add to SBP message envelope
    dispatcher: dict
      SBP dispatch table

    """

    def __init__(self,
                 filename,
                 when='M',
                 interval=30,
                 backupCount=3,
                 **kwargs):
        super(RotatingFileLogger, self).__init__(None, **kwargs)
        self.handler = TimedRotatingFileHandler(filename, when, interval,
                                                backupCount)
        self.logger = logging.getLogger("Rotating Log")
        self.logger.setLevel(logging.INFO)
        self.logger.addHandler(self.handler)

    def __call__(self, msg, **metadata):
        self.call(msg, **metadata)

    def flush(self):
        self.handler.flush()

    def close(self):
        self.handler.close()

    def call(self, msg, **metadata):
        self.logger.info(self.dump(msg, **metadata))
Exemple #3
0
    def write_log(self, log_level, log_message):
        """
        解决实例化对象作为参数,再取实例化对象参数时参数变为元组情况
        """
        if isinstance(self.logFlag, tuple):
            self.logFlag = ''.join(self.logFlag)
        if isinstance(self.logFile, tuple):
            self.logFile = ''.join(self.logFile)

        ###创建一个logger
        logger = logging.getLogger(self.logFlag)
        logger.setLevel(logging.DEBUG)

        ###建立日志目录
        log_dir = os.path.dirname(self.logFile)
        if not os.path.isdir(log_dir):
            os.makedirs(log_dir)

        ###创建一个handler用于写入日志文件
        handler = TimedRotatingFileHandler(self.logFile, when='D', interval=1, backupCount=7)
        handler.setLevel(logging.DEBUG)

        ###设置后缀名称,跟strftime的格式一样
        handler.suffix = "%Y%m%d.log"

        ###定义handler的输出格式
        formatter = logging.Formatter('%(asctime)s  %(name)s  %(levelname)s  %(message)s')
        handler.setFormatter(formatter)

        ###将相应的handler添加在logger对象中
        logger.addHandler(handler)

        ###开始记录日志
        level_dic = {'debug': logger.debug, 'info': logger.info, 'warning': logger.warning, 'error': logger.error,
                     'critical': logger.critical}

        ##最终如:logger.debug(log_message)
        level_dic[log_level](log_message)

        ###删除重复记录
        handler.flush()
        logger.removeHandler(handler)
Exemple #4
0
import fileinput
import json
import argparse
import sys
from logging.handlers import TimedRotatingFileHandler


class NoFormatter():
    def format(self, record):
        return record.strip()


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("logdir")
    args = parser.parse_args()
    logger = TimedRotatingFileHandler(args.logdir + '/reqlog.jl',
                                      when='h',
                                      utc=True)
    formatter = NoFormatter()
    logger.setFormatter(formatter)

    for line in sys.stdin:
        logger.emit(line)

    logger.flush()
Exemple #5
0
class loggingUtils(Singleton):
    def __init__(self, logfile):
        self.logger = logging.getLogger(logfile)

        if not self.logger.handlers:
            self.hdlr = TimedRotatingFileHandler(
                'D:/code/pythoneod/log/%s.log' % logfile,
                when="d",
                interval=1,
                backupCount=7)

            formatter = logging.Formatter(
                '%(levelname)s %(asctime)s %(filename)s[line:%(lineno)d] %(message)s',
                '%Y-%m-%d %H:%M:%S')
            self.hdlr.setFormatter(formatter)
            self.logger.addHandler(self.hdlr)
            self.logger.setLevel(logging.INFO)

            # 定义一个Handler打印INFO及以上级别的日志到sys.stderr
            console = logging.StreamHandler()
            console.setLevel(logging.INFO)
            # 设置日志打印格式
            formatter = logging.Formatter(
                '%(levelname)s %(asctime)s %(filename)s[line:%(lineno)d] %(message)s',
                '%Y-%m-%d %H:%M:%S')
            console.setFormatter(formatter)
            # 将定义好的console日志handler添加到root logger
            self.logger.addHandler(console)

    def info(self, msg):
        self.logger.info(msg)
        self.hdlr.flush()

    def debug(self, msg):
        self.logger.debug(msg)
        self.hdlr.flush()

    def error(self, msg):
        self.logger.error(msg)
        self.hdlr.flush()

    def exception(self, msg):
        self.logger.exception(msg)
        self.hdlr.flush()

    def error_sys(self, limit=None):
        exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
        if limit is None:
            if hasattr(sys, 'tracebacklimit'):
                limit = sys.tracebacklimit
        n = 0
        eline = 'n'
        while exceptionTraceback is not None and (limit is None or n < limit):
            f = exceptionTraceback.tb_frame
            lineno = exceptionTraceback.tb_lineno
            co = f.f_code
            filename = co.co_filename
            name = co.co_name
            eline += ' File "%s", line %d, in %s n ' % (filename, lineno, name)
            exceptionTraceback = exceptionTraceback.tb_next
            n = n + 1

        eline += "n".join(
            traceback.format_exception_only(exceptionType, exceptionValue))
        self.logger.error(eline)
        self.hdlr.flush()