python日志模块使用

天涯浪子 提交于 2020-03-09 15:22:35

实例选自:openpifpaf/log.py

参考:
博客1
博客2

import logging


LOG = logging.getLogger(__name__) # 获取当前模块名当作此Logger的名字

def configure(args):
    # pylint: disable=import-outside-toplevel
    from pythonjsonlogger import jsonlogger
    from . import __version__ as VERSION
    # 此处使用logging的方式是使用Logging日志系统的四大组件
    file_handler = logging.FileHandler(args.output + '.log', mode='w') # 创建一个输出到log文件的Handler.
    file_handler.setFormatter(  # 设置日志输出格式
        jsonlogger.JsonFormatter('(message) (levelname) (name) (asctime)'))
    stdout_handler = logging.StreamHandler(sys.stdout)  # 创建一个输出到控制台的Handler

    # basicConfig()函数只用来配置RootLogger.而且因为RootLogger为其他Logger的根Logger,即系统的根logger
    # 因此当你使用这个配置后,【其他Logger都会】继承RootLogger的配置,
    # 除非其他位置的Logger设置了name,可以有自己的独立设置,从而不继承这个RootLogger
    logging.basicConfig(handlers=[stdout_handler, file_handler])  # RootLogger的level默认是WARNING
    # logging.warning('Who am I?')  # 这样调用其实是在root logger位置输出
    log_level = logging.INFO if not args.debug else logging.DEBUG  # logging(没有提供名字)会直接设置RootLogger的状态

    # 为当前logger设置名称,可对每个模块设置独立的logger,通过name来进行区别.若当前模块没有设置,将与父模块保持一致
    logging.getLogger('openpifpaf').setLevel(log_level)

    # ############ 不用logging.basicConfig()的话,也可以替换成下面代码,是相同的效果 ###############
    # logger = logging.getLogger('openpifpaf')  # #创建logger对象
    # logger.setLevel(log_level)  # 设置logger的日志处理级别
    # logger.addHandler(stdout_handler)  # 将handler绑定到logger
    # logger.addHandler(file_handler)

    LOG.info({
        'type': 'process',
        'argv': sys.argv,  # 返回一个list,包含运行程序本身的名字,以及用户输入的命令行中给予的参数
        'args': vars(args),  # args命名空间的值
        'version': VERSION,
        'hostname': socket.gethostname(),
    })
    return log_level
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!