• Python logging模块


    1.日志模块设置日志文件大小以及最大备份数量(使用了日志配置文件):

        def init_loggers(self, project_path):
            logging.config.fileConfig(os.path.join(project_path, 'config', 'log.conf'))
            logger = logging.getLogger("mylogger")
            handler = logging.handlers.RotatingFileHandler(
                filename=os.path.join(project_path, 'output', 'report', 'server_log.log'),
                maxBytes=1 * 1024 * 1024, backupCount=10,)
            handler.setLevel(logging.INFO)
            handler.setFormatter(logger.handlers[0].formatter)
            logger.addHandler(handler)
            self.logger = logger

    当日志文件超出大小后发现不会自动备份,系统报错,经分析日志文件处于占用状态,不能进行重命名,原因是由于logger添加了多个handler,如果改成一个handler即可进行备份了

    Traceback (most recent call last):
      File "C:Python27liblogginghandlers.py", line 77, in emit
        self.doRollover()
      File "C:Python27liblogginghandlers.py", line 142, in doRollover
        os.rename(self.baseFilename, dfn)
    WindowsError: [Error 32]

     2.使用多进程初始化同一日志模块,会导致日志备份报错,因为两个进程同时打开了日志文件,在重命名时会出现WindowsError: [Error 32]错误,该错误是由于文件已被打开,

    按照官方文档的介绍,logging 是线程安全的,也就是说,在一个进程内的多个线程同时往同一个文件写日志是安全的。但是(对,这里有个但是)多个进程往同一个文件写日志不是安全的,为了解决这个问题,可以使用 ConcurrentLogHandler,ConcurrentLogHandler 可以在多进程环境下安全的将日志写入到同一个文件,并且可以在日志文件达到特定大小时,分割日志文件。在默认的 logging 模块中,有个 TimedRotatingFileHandler 类,可以按时间分割日志文件,可惜 ConcurrentLogHandler 不支持这种按时间分割日志文件的方式。
  • 相关阅读:
    es数据采集脚本样例
    实时文本采集器
    闭包理解
    django orm 联表查询优化
    关于vue中使用ajax页面不更新问题
    悲观锁和乐观锁的区别
    golang基础-tailf日志组件使用
    通过request获取不同方式请求的传参
    排序算法比对,插入算法和冒泡算法
    安利一波超级好课 —— 在家也不能闲着呀!!!
  • 原文地址:https://www.cnblogs.com/cmm2016/p/7562089.html
Copyright © 2020-2023  润新知