• logging日志及其使用代码


    一、logging日志概念及简单使用

    logging日志:用来记录程序在运行时所产生的日志信息

    记录程序日志信息目的

    • 能够方便的了解程序的运行情况
    • 可以分析用户的操作行为、喜好等信息
    • 方便开发人员检查bug

    logging日志等级从低到高依次为

    1. debug:程序调试bug时使用
    2. info:程序正常运行时使用,显示正常运行结果信息
    3. warning:程序未按预期运行时使用,如登录密码错误
    4. error:程序出错时使用
    5. critical:特别严重的错误,导致程序不能再继续运行时使用

    默认为WARNING等级,等级大于等于WARNING才记录日志信息,以下将logging日志信息输出到控制台

    1. import logging
    2. logging.debug("这是一个debug级别日志信息")
    3. logging.info("这是一个info级别日志信息")
    4. logging.warning("这是一个wanrning级别日志信息") # 默认级别,即默认只显示该级别以上的日志信息
    5. logging.error("这是一个error级别日志信息")
    6. logging.critical("这是一个critical级别日志信息")
    7. 输出:
    8. WARNING:root:这是一个wanrning级别日志信息
    9. ERROR:root:这是一个error级别日志信息
    10. CRITICAL:root:这是一个critical级别日志信息

    logging日志输出格式设置

    • level=logging.DEBUG:表示要输出的日志等级,DEBUG即表示从该级别输出
    • format:设置格式输出
      • %(asctime)s:打印当前时间
      • %(filename)s:打印当前执行的程序文件名
      • %(lineno)d:打印所在行号
      • %(levelname)s:打印日志级别名称
      • %(message)s:打印日志信息
    1. import logging
    2. logging.basicConfig(level=logging.DEBUG, format='当前时间:%(asctime)s - 所在文件:%(filename)s - 行号:[%(lineno)d] - 级别:%(levelname)s - 日志信息:%(message)s')
    3. logging.debug("这是一个debug级别日志信息")
    4. logging.info("这是一个info级别日志信息")
    5. logging.warning("这是一个wanrning级别日志信息") # 默认级别,即默认只显示该级别以上的日志信息
    6. logging.error("这是一个error级别日志信息")
    7. logging.critical("这是一个critical级别日志信息")
    8. 输出:
    9. 当前时间:2022-11-13 11:01:30,492 - 所在文件:logging日志.py - 行号:[4] - 级别:DEBUG - 日志信息:这是一个debug级别日志信息
    10. 当前时间:2022-11-13 11:01:30,492 - 所在文件:logging日志.py - 行号:[5] - 级别:INFO - 日志信息:这是一个info级别日志信息
    11. 当前时间:2022-11-13 11:01:30,492 - 所在文件:logging日志.py - 行号:[6] - 级别:WARNING - 日志信息:这是一个wanrning级别日志信息
    12. 当前时间:2022-11-13 11:01:30,492 - 所在文件:logging日志.py - 行号:[7] - 级别:ERROR - 日志信息:这是一个error级别日志信息
    13. 当前时间:2022-11-13 11:01:30,492 - 所在文件:logging日志.py - 行号:[8] - 级别:CRITICAL - 日志信息:这是一个critical级别日志信息

    如需保存到日志文件中,应修改如下,filename为保存的文件名,filemode为文件模式,a即表示追加,以下将logging日志保存到log.txt日志文件中

    logging.basicConfig(level=logging.DEBUG, format='当前时间:%(asctime)s - 所在文件:%(filename)s - 行号:[%(lineno)d] - 级别:%(levelname)s - 日志信息:%(message)s', filename='log.txt', filemode='a',)
    

    二、web项目中应用logging日志

    • logging日志配置信息在程序入口模块设置一次,整个程序均可生效
    • logging.basicConfig 表示 logging 日志配置操作

    webServer.py文件中添加或修改如下代码

    1. import logging
    2. logging.basicConfig(level=logging.DEBUG, format='当前时间:%(asctime)s - 所在文件:%(filename)s - 行号:[%(lineno)d] - 级别:%(levelname)s - 日志信息:%(message)s', filename='log2.txt', filemode='a')
    3. def main():
    4. # 命令行方式执行
    5. if len(sys.argv) != 2: # 判断命令行参数个数是否为2
    6. print("请执行格式为[ python3 xx.py 9000 ] 的命令")
    7. logging.warning('用户命令行执行程序参数个数输入错误,请输入两个参数')
    8. return
    9. if not sys.argv[1].isdigit(): # 判断字符串是否为数字组成
    10. print("请执行格式为[ python3 xx.py 9000 ]的命令")
    11. logging.warning('用户命令行执行程序第二个参数不是数字')
    12. return
    13. port = int(sys.argv[1]) # 获取终端命令行参数
    14. web_server = HttpWebServer(port)
    15. # # 指定端口
    16. # web_server = HttpWebServer(9000)
    17. web_server.start()
    18. -----------------------HttpWebServer类中handle_client_request()函数-----------------------
    19. if request_path.endswith(".html"): # 判断是否是动态资源请求
    20. # 动态资源请求需找web框架进行处理,把请求参数给webFrame框架
    21. logging.info('动态资源请求日志信息为:' + request_path)
    22. # 准备需要给webFrame框架的参数信息,放在以下env字典中
    23. env = { # 字典存储用户的请求信息
    24. "request_path": request_path
    25. # 还可传入其他请求信息,如请求头
    26. }
    27. ……
    28. ……
    29. else: # 静态资源请求
    30. logging.info('静态资源请求日志信息为:' + request_path)
    31. try:
    32. with open('static' + request_path, 'rb') as file: # 动态打开指定文件
    33. file_data = file.read() # 读取指定文件数据

    在webFrame.py文件的handle_request()函数中添加如下

    1. else: # 没有找到动态资源
    2. logging.error('资源不存在,未设置路由' + request_path)
    3. result = notFound()
    4. return result

    log2.txt文件得到以下信息

    1. 当前时间:2022-11-13 14:51:03,404 - 所在文件:webServer.py - 行号:[104] - 级别:WARNING - 日志信息:用户命令行执行程序参数个数输入错误,请输入两个参数
    2. 当前时间:2022-11-13 14:52:34,959 - 所在文件:webServer.py - 行号:[108] - 级别:WARNING - 日志信息:用户命令行执行程序第二个参数不是数字
    3. 当前时间:2022-11-13 14:53:55,911 - 所在文件:webServer.py - 行号:[41] - 级别:INFO - 日志信息:动态资源请求日志信息为:/showCenter.html
    4. 当前时间:2022-11-13 14:53:55,967 - 所在文件:webServer.py - 行号:[73] - 级别:INFO - 日志信息:静态资源请求日志信息为:/plugins/bootstrap-3.4.1-dist/css/bootstrap.min.css
    5. 当前时间:2022-11-13 14:53:56,166 - 所在文件:webServer.py - 行号:[73] - 级别:INFO - 日志信息:静态资源请求日志信息为:/js/jquery-3.4.1.min.js
    6. 当前时间:2022-11-13 14:53:56,288 - 所在文件:webServer.py - 行号:[73] - 级别:INFO - 日志信息:静态资源请求日志信息为:/plugins/bootstrap-3.4.1-dist/js/bootstrap.min.js
    7. 当前时间:2022-11-13 14:53:56,712 - 所在文件:webServer.py - 行号:[41] - 级别:INFO - 日志信息:动态资源请求日志信息为:/center.html
    8. 当前时间:2022-11-13 14:53:56,772 - 所在文件:webServer.py - 行号:[73] - 级别:INFO - 日志信息:静态资源请求日志信息为:/favicon.ico
    9. 当前时间:2022-11-13 14:55:11,535 - 所在文件:webServer.py - 行号:[41] - 级别:INFO - 日志信息:动态资源请求日志信息为:/showCenter2.html
    10. 当前时间:2022-11-13 14:55:11,539 - 所在文件:mysqlToJson.py - 行号:[69] - 级别:ERROR - 日志信息:资源不存在,未设置路由/showCenter2.html
    11. 当前时间:2022-11-13 14:55:11,544 - 所在文件:mysqlToJson.py - 行号:[69] - 级别:ERROR - 日志信息:资源不存在,未设置路由/showCenter2.html

     学习导航:http://xqnav.top/

  • 相关阅读:
    【Java进阶篇】第一章 面向对象
    8-flask django执行原生sql和sqlalchemy执行原生sql、flask-sqlalchemy使用(filter_by和filter)、flask-migrate使用
    制胜充电桩下半场,特来电、星星充电们要靠运营?
    JVM 方法内联
    【RocketMQ】RocketMQ存储结构设计
    KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(4)
    lnmp平台部署web应用,安装Discuz社区平台详细文章——更新中
    LCR 159.库存管理 III
    美创科技荣升国家信息安全漏洞库(CNNVD)二级技术支撑单位
    8.2 从堆中绕过SafeS.E.H
  • 原文地址:https://blog.csdn.net/qq_43874317/article/details/127829122