zoukankan      html  css  js  c++  java
  • Logging模块的简单使用 Python

    看过还不错,基本功能都讲到了。

    下面把它的使用代码写出来,很简单:

    1       def initlog():
    2           import logging
    3           
    4           logger = logging.getLogger()
    5           hdlr = logging.FileHandler(logfile)
    6           formatter = logging.Formatter(‘%(asctime)s %(levelname)s %(message)s’)
    7           hdlr.setFormatter(formatter)
    8           logger.addHandler(hdlr)
    9           logger.setLevel(logging.NOTSET)
    10          
    11          return logger

    这个函数用来返回一个日志对象。

    第4行生成一个日志对象,可以带一个名字,可以缺省。(注:这里的名字是日志类的名字,用于标识这个logger类)
    第5行生成一个Handler。logging支持许多Handler,象FileHandler, SocketHandler, SMTPHandler等,我由于要写文件就使用了FileHandler。logfile是一个全局变量,它就是一个文件名,如:’crawl.log’。
    第6行生成一个格式器,用于规范日志的输出格式。如果没有这行代码,那么缺省的格式就是:”%(message)s”。也就是写日志时,信息是什么日志中就是什么,没有日期,没有信息级别等信息。logging支持许多种替换值,详细请看Formatter的文档说明。这里有三项:时间,信息级别,日志信息。(比较常用就着三项)
    第7行将格式器设置到处理器上。
    第8行将处理器加到日志对象上。
    第9行设置日志信息输出的级别。logging提供多种级别的日志信息,如:NOTSET, DEBUG, INFO, WARNING, ERROR, CRITICAL等。每个级别都对应一个数值。如果不执行此句,缺省为30(WARNING)。可以执行:logging.getLevelName(logger.getEffectiveLevel())来查看缺省的日志级别。日志对象对于不同的级别信息提供不同的函数进行输出,如:info(), error(), debug()等。当写入日志时,小于指定级别的信息将被忽略。因此为了输出想要的日志级别一定要设置好此参数。这里我设为NOTSET(值为0),也就是想输出所有信息。

    有了日志对象,输出就非常简单了:

    有以下几种的level

      python模块鈥斺攍ogging(日志管理)

    logger.error(message)
    logger.info(message)

    logger.warning(msg)

    logger.critical(msg)

    logger.exception(msg)

    logger.log(msg)

    def initlog():
        import logging
    
        logger = logging.getLogger('LoggerE18')
        hdlr = logging.FileHandler("D:\Euler\E18\Log.txt", "w") # Write mode
        formatter = logging.Formatter('%(asctime)s, %(levelname)s, %(message)s')
        hdlr.setFormatter(formatter)
        logger.addHandler(hdlr)
        logger.setLevel(logging.DEBUG)
    
        return logger
    
    import io
    logger = initlog()
    logger.info("logger name is '" + logger.name + "'")
    f = open("D:\Euler\E18\Data.txt", "r")
    logger.info("Open file")
    data = f.readlines()
    logger.info("Get data")
    f.close()
    logger.debug(data)
    for i in range(0, len(data)-1):
        data[i] = data[i].strip()
    logger.debug(data)
    

      这里的日志采用W模式,只写模式,这样就不用追加导致日志增大的麻烦。 setLevel一定要注意不要用NOTSET,那种的是写不进去的,会什么日志都写不了。就用DEBUG 就好。

    logger类的关闭要采用logging.shutdown()方法来关闭。

    伪python爱好者,正宗测试实践者。
  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/herbert/p/2189699.html
Copyright © 2011-2022 走看看