zoukankan      html  css  js  c++  java
  • Logging日志模块的使用

    五种级别的日志记录模式

    DEBUG          详细信息,典型地调试问题时会感兴趣。
    INFO             证明事情按预期工作。
    WARNING          表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了’)。软件还是在正常工作。
    ERROR            由于更严重的问题,软件已不能执行一些功能了。
    CRITICAL         严重错误,表明软件已不能继续运行了。

    两种配置方式

    logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
    
    filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
    filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
    format:指定handler使用的日志显示格式。
    datefmt:指定日期时间格式。
    level:设置rootlogger(后边会讲解具体概念)的日志级别
    stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
    
    format参数中可能用到的格式化串:
    %(name)s Logger的名字
    %(levelno)s 数字形式的日志级别
    %(levelname)s 文本形式的日志级别
    %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
    %(filename)s 调用日志输出函数的模块的文件名
    %(module)s 调用日志输出函数的模块名
    %(funcName)s 调用日志输出函数的函数名
    %(lineno)d 调用日志输出函数的语句所在的代码行
    %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
    %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
    %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    %(thread)d 线程ID。可能没有
    %(threadName)s 线程名。可能没有
    %(process)d 进程ID。可能没有
    %(message)s用户输出的消息
    配置参数

    简单配置

    配置单个输出

    import logging
    
    FORMATTER = '%(asctime)s -- %(filename)s[line:%(lineno)d] -- %(levelname)s -- %(message)s'
    DATEFMT = '%Y-%m-%d %H:%M:%S'
    
    logging.basicConfig(level=logging.DEBUG,  # 输出的等级
                        format=FORMATTER,  # 输出的格式
                        datefmt=DATEFMT,  # 输出的时间格式(上面的输出格式包含有输出时间)
                        # filename='/tmp/test.log',  # 写入文件的路径
                        # filemode='a'  # 写入的格式  a是追加
                        )
    
    logging.debug('debug message')
    logging.info('info message')
    logging.warning('warning message')
    logging.error('error message')
    logging.critical('critical message')

    详细配置

    配置两个输出

    import logging
    
    FORMATTER = '%(asctime)s -- %(filename)s[line:%(lineno)d] -- %(levelname)s -- %(message)s'
    DATEFMT = '%Y-%m-%d %H:%M:%S'
    
    
    def get_logger(file_path='logging_debug.log', mode='a', file_level=logging.WARNING, std_level=logging.DEBUG):
        """
        将日志文件输出到文件与std终端
        :param file_path:
        :param mode: 默认a为追加写入
        :param file_level: 默认:waring level
        :param std_level: 默认:debug level
        :return:
        """
        # 1. 实例化log对象
        _logger = logging.getLogger(__name__)
        _logger.setLevel(logging.DEBUG)  # 这个必须得设置,否则logger将使用ROOT的日志记录级别
    
        # 2. 创建handler
        file_handler = logging.FileHandler(file_path, encoding='utf-8', mode=mode)  # 用于写入日志文件
        std_handler = logging.StreamHandler()  # 用于输出到控制台
    
        # 3. 给handler设置输出的等级
        file_handler.setLevel(file_level)
        std_handler.setLevel(std_level)
    
        # 4. 设置格式, 格式可以使用不同的。
        file_formatter = logging.Formatter(FORMATTER, datefmt=DATEFMT)
        std_formatter = logging.Formatter(FORMATTER, datefmt=DATEFMT)
    
        # 5. 给handler绑定格式
        file_handler.setFormatter(file_formatter)  # 写入日志文件的格式
        std_handler.setFormatter(std_formatter)  # 输出控制台的格式
    
        # 6. 给实例logger绑定handler
        _logger.addHandler(file_handler)
        _logger.addHandler(std_handler)
    
        return _logger
    
    
    if __name__ == '__main__':
        logger = get_logger()
    
        # 7. 使用
        logger.debug('debug message')
        logger.info('info message')
        logger.warning('warning message')
        logger.error('error message')
        logger.critical('critical message')
  • 相关阅读:
    ASP.NET MVC & EF 构建智能查询 二、模型的设计与ModelBinder
    ASP.NET MVC & EF 构建智能查询 一、智能查询的需求与设计
    在ASP.NET中自动合并小图片并使用CSS Sprite显示出来
    Entity Framework with MySQL Provider 更新行数为0的Bug
    为ASP.NET MVC 2.0添加Razor模板引擎 (on .NET4)
    ASP.NET MVC 2.0 in Vs2010 :使用C# 4.0中使用动态类型来传递ViewData
    问题贴
    Visual Studio 2010 RC 下安装ASP.NET MVC 2.0 RTM
    Microsoft Ajax CDN与Google Ajax CDN 你来试试哪个快
    ASP.NET MVC & EF 构建智能查询 三、解析QueryModel
  • 原文地址:https://www.cnblogs.com/sunch/p/9777309.html
Copyright © 2011-2022 走看看