zoukankan      html  css  js  c++  java
  • 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 不支持这种按时间分割日志文件的方式。
  • 相关阅读:
    Java 基础 | 命名和运算
    JSON类型解析
    Python 实例方法、类方法、静态方法的区别与作用
    Python中logging模块的基本用法
    python中局部变量和全局变量
    C# 中 引用类型和值类型
    VS2008+SVN插件的使用
    使用linq to xml 怎么减小内存消耗
    linq to xml 中SaveOptions和LoadOptions的介绍
    C# 中==和Equals方法在引用类型中的区别
  • 原文地址:https://www.cnblogs.com/cmm2016/p/7562089.html
Copyright © 2011-2022 走看看