python实现高性能日志系统(支持异步、磁盘缓存)。

以下是实现高性能日志系统的完整代码,包含异步写入、磁盘缓存和日志轮转功能:


import logging

import logging.handlers

import queue

import threading

import time

from collections import deque


class AsyncLogHandler(logging.Handler):

    def __init__(self, base_handler, max_queue_size=10000, 

                 cache_size=1000, flush_interval=5):

        super().__init__()

        self.base_handler = base_handler

        self.log_queue = queue.Queue(max_queue_size)

        self.cache = deque(maxlen=cache_size)

        self.flush_interval = flush_interval

        self._running = True

        self._worker = threading.Thread(target=self._process_logs)

        self._worker.daemon = True

        self._worker.start()


    def _process_logs(self):

        while self._running or not self.log_queue.empty():

            try:

                record = self.log_queue.get(timeout=self.flush_interval)

                self.cache.append(record)

                self.base_handler.emit(record)

            except queue.Empty:

                if self.cache:

                    self._flush_cache()

            except Exception as e:

                print(f"Logging error: {e}")


    def _flush_cache(self):

        for record in self.cache:

            self.base_handler.emit(record)

        self.cache.clear()


    def emit(self, record):

        try:

            self.log_queue.put_nowait(record)

        except queue.Full:

            self._flush_cache()

            self.log_queue.put_nowait(record)


    def close(self):

        self._running = False

        self._worker.join()

        self._flush_cache()

        self.base_handler.close()


def create_async_logger(name, filename, level=logging.INFO, 

                       max_bytes=10*1024*1024, backup_count=5):

    logger = logging.getLogger(name)

    logger.setLevel(level)

    

    # 创建RotatingFileHandler

    file_handler = logging.handlers.RotatingFileHandler(

        filename, maxBytes=max_bytes, backupCount=backup_count

    )

    file_handler.setFormatter(logging.Formatter(

        '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

    ))

    

    # 包装为异步处理器

    async_handler = AsyncLogHandler(file_handler)

    logger.addHandler(async_handler)

    

    return logger



import os

import tempfile

from async_logger import create_async_logger


class LogManager:

    def __init__(self, log_dir=None, cache_size=1000):

        self.log_dir = log_dir or tempfile.gettempdir()

        self.cache_size = cache_size

        self.loggers = {}

        os.makedirs(self.log_dir, exist_ok=True)


    def get_logger(self, name, level=logging.INFO):

        if name not in self.loggers:

            log_file = os.path.join(self.log_dir, f"{name}.log")

            self.loggers[name] = create_async_logger(

                name, log_file, level=level

            )

        return self.loggers[name]


    def flush_all(self):

        for logger in self.loggers.values():

            for handler in logger.handlers:

                if isinstance(handler, AsyncLogHandler):

                    handler._flush_cache()


    def close_all(self):

        self.flush_all()

        for logger in self.loggers.values():

            for handler in logger.handlers:

                handler.close()


 log_manager import LogManager

import time

import random


def main():

    log_manager = LogManager(log_dir="./logs")

    logger = log_manager.get_logger("app")

    

    # 模拟高并发日志写入

    for i in range(1000):

        logger.info(f"Processing task {i}")

        if random.random() < 0.1:

            logger.error(f"Error occurred in task {i}")

        time.sleep(0.001)  # 模拟处理时间

    

    log_manager.close_all()


if __name__ == "__main__":

    main()

这个日志系统实现了异步写入、内存缓存和自动日志轮转功能,适合高并发场景。核心组件包括异步处理器、日志管理器和示例用法。

http://www.thedesignrepublic.com/

http://www.yxhgq.com/

http://www.jianhuotech.com/

http://www.bjyozd.com

http://www.sunny-way.cn/

http://www.cnsenkai.com/

http://www.zluren.com.cn/

http://www.cddtk119.com/

http://www.boao168.com.cn/

http://www.czs365.net/

http://www.ianvan.com/

http://www.fangzhoushidai.com

http://www.qiaosen-kj.com

http://gzhyxjj.cn

http://xatlzg.com

http://www.doushiwang.cn

http://www.sxyuanzheng.com

http://www.jwdyd.com

http://www.xaminglang.com

http://www.lboneti.cn

http://www.ahlongda.com

http://www.gdlanye.com

http://www.ktlcutter.com

http://www.hbzfjn.com

http://www.shbaimule.com

http://www.clgzkj.com

http://www.fjjhwy.cn

http://www.goodluck-lift.com

http://www.storlead.shop

http://magicians.com.cn

http://mall.yeepayer.com

http://tzkqzj.com

http://www.jinfanweilai.com

https://www.durkflex.cn/

http://www.szfmhj168.com.cn/

http://hfnz.ahaiba.com/

http://sjmzjypx010.ahaiba.com/

http://nyh.ahaiba.com/

请使用浏览器的分享功能分享到微信等