• python学习笔记 day29 logging模块


     1. logging配置方式--basicConfig

    import logging
    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',
                        datefmt="%a %d %b %Y:%M:%S",
                        filename='test.log',
                        filemode='w')
    logging.debug("debug message")
    logging.info("info message")
    logging.warning("warning message")
    logging.error("error message")
    logging.critical("critical message")

    运行结果(test.log文件中会记录log信息):

    如果我们想在控制台输出上述信息,可以这样:

    import logging
    logging.basicConfig(level=logging.DEBUG,  # DEBUG以上的级别都会打印
                        format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',  # 设置格式
                        datefmt="%a %d %b %Y:%M:%S")  # asctime的格式
    logging.debug("debug message")
    logging.info("info message")
    logging.warning("warning message")
    logging.error("error message")
    logging.critical("critical message")

    运行结果:

    如果我们想打印中文的日志信息,如果是吧日志写入文件,则会乱码:

    import logging
    logging.basicConfig(level=logging.DEBUG,  # DEBUG 以上的信息都会打印(debug info warning error critical )
                        format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',  # 设置格式
                        datefmt='%a %d %b %Y:%M %S',  # 设置日期格式
                        filename='test1.log',  # 往test.log文件中写入日志信息
                        filemode='w')
    
    try:  # 如果想要把错误信息以日志的形式写入文件中,则事先必须知道是什么类型的错误,才能进行捕捉
        message=int(input(">>>"))  # 当用户输入非数字的内容,写入文件时 就会乱码
    except ValueError:
        logging.error("您输入的格式有误,必须输入数字!")

    运行结果:

     但是如果想打印的日志信息包含中文,输出在控制台就没事:

    import logging
    logging.basicConfig(level=logging.DEBUG,  # DEBUG 以上的信息都会打印(debug info warning error critical )
                        format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',  # 设置格式
                        datefmt='%a %d %b %Y:%M %S')  # 设置日期格式
                        # filename='test1.log',  # 往test.log文件中写入日志信息
                        # filemode='w')
    
    try:  # 如果想要把错误信息以日志的形式写入文件中,则事先必须知道是什么类型的错误,才能进行捕捉
        message=int(input(">>>"))  # 当用户输入非数字的内容,写入文件时 就会乱码
    except ValueError:
        logging.error("您输入的格式有误,必须输入数字!")

    运行结果:

    basic Config 有两个问题:

    1. 日志信息不能同时在文件和控制台输出;

    2. 往文件中输入带有中文的日志信息时,会出现乱码问题;

    2. logging的配置方式----getLogger

    import logging
    logger=logging.getLogger()
    fh=logging.FileHandler("test.log",'w',encoding='utf-8')  # 可以设置文件操作符 ,默认往文件中写的方式时 a 追加
    ch=logging.StreamHandler()  # 可以往控制台输出日志信息
    formatter=logging.Formatter("%(asctime)s %(filename)s %(levelname)s %(message)s")
    fh.setFormatter(formatter)  # 文件操作符绑定格式
    ch.setFormatter(formatter)
    logger.setLevel(logging.DEBUG)  # logger对象默认设置WARNING 才会显示 我们可以通过logger.setLevel()设置级别(一定要对logger对象设置!而不是fh 文件操作符)
    logger.addHandler(fh)  # logger 对象绑定文件按操作符
    logger.addHandler(ch)
    
    logging.debug("debug message(即使想输出中文的日志信息,文件中也不会出现乱码)")
    logging.info("info message")
    logging.warning("warning message")
    logging.error("error message")
    logging.critical("critical message")

    文件中的日志信息:

     控制台的日志信息:

     1. logger对象这种配置方式解决了上述basicConfig配置方式 往文件中输入日志信息中文乱码的情况;

    2.日志信息 可以同时往文件和控制台输出;

    talk is cheap,show me the code
  • 相关阅读:
    location.href
    网络载入数据和解析JSON格式数据案例之空气质量监測应用
    概率dp HDU 3853
    poj2031-Building a Space Station(最小生成树,kruskal,prime)
    在JS数组指定位置插入元素
    leetcode
    leetcode笔记:Range Sum Query
    最优解算法的讨论
    NYOJ_77 开灯问题
    C++调用Lua的性能測试
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9734700.html
Copyright © 2020-2023  润新知