• Python-日志模块


    目录

    一、日志级别

    二、日志配置

    1、日志基本配置

    2、日志配置字典(知道咋么改就可以)

    3、日志的使用


    一、日志级别

    import logging
    
    logging.debug('调试日志')
    logging.info('消息日志')
    logging.warning('警告日志')
    logging.error('错误日志')
    logging.critical('严重错误日志')

    注:info 级别一下的日志不用输出,只打印Warning级别以上的日志(可以更改);

    二、日志配置

    1、日志基本配置

    1. # 日志基本配置
    2. logging.basicConfig( # 默认编码方式gbk
    3. # 1、日志级别
    4. level=30, # 用来控制输出级别,30对应的是warning
    5. # DEBUG:10
    6. # INFO:20
    7. # WARNING:30
    8. # ERROR:40
    9. # CRITICAL:50
    10. # 2、日志输出格式
    11. format='%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s',
    12. # %(asctime)s 获取当前时间,
    13. # % (name)s 当前日志的名字
    14. # %(pathname)s 指的是哪一个文件产生的日志
    15. # %(lineno)d 指的是文件的哪一行代码产生的日志
    16. # %(levelname)s 指的是文本形式的日志等级
    17. # 3、asctime的时间格式
    18. datefmt='%Y %m %d %H:%M:%S',
    19. # 4、日志输出位置:终端/文件
    20. filename='user.log', # 不指定此配置,默认打印到终端
    21. )

    '''
    %(name)s Logger的名字(getlogger时指定的名字)
    %(levelno)s 数字形式的日志级别
    %(levelname)s 文本形式的日志级别
    %(pathname)s 调用日志输出日志的完整路径名
    %(filename)s 调用日志输出日志的文件名
    %(module)s 调用日志输出日志的模块名
    %(funcName)s 调用日志输出日志的函数名
    %(lineno)d 调用日志输出函数的语句所在的代码行
    %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
    %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
    %(asctime)s 字符串形式的当前时间,默认格式是 “2022 07 30 22:15:53,394”
    %(thread)d 线程ID,可能没有
    %(threadName)s 线程名,可能没有
    %(process)d 进程ID,可能没有
    %(message)s 用户输出的消息
    '''
    '''
    logging模块有三个比较重要的功能组件:
    1、loggers 配置文件可定义一些输出日志的appname
    2、handler 配置日志的分隔大小,输出位置,日志文件创建等
    3、formatters 配置日志输出的格式
    '''

    2、日志配置字典(知道咋么改就可以)

    (1)需要将字典放在项目的settings.py里面;(图片中Ctrl+Shift +-号缩放)

    (2)解读

    1. LOGGING_DIC = {
    2. 'version': 1.0, # 版本,根据个人修改
    3. 'disable existing loggers': False,
    4. # 日志格式,格斯根据需求,自己更改或者命名
    5. 'formatters': {
    6. 'standard': {
    7. 'format': '%(asctime)s %(threadName)s:%(thread)d [%(name)s] %(levelname)s [%(pathname)s:%(lineno)d] %(message)s',
    8. 'datefmt': '%Y %m %d %H:%M:%S',
    9. },
    10. 'simple': {
    11. 'format': '%(asctime)s [%(name)s] %(levelname)s %(message)s', 'datefmt': '%Y %m %d %H:%M:%S',
    12. },
    13. 'test': {
    14. 'format': '%(asctime)s %(message)s',
    15. },
    16. },
    17. 'filters': {}, # 过滤器
    18. # 日志处理器
    19. 'handlers': {
    20. 'console WARNING handler': {
    21. 'level': 'WARNING', # 日志处理的级别限制
    22. 'class': 'logging.StreamHandler', # 输出到终端
    23. 'formatter': 'simple' # 日志格式
    24. },
    25. 'file info handler': {
    26. 'level': 'INFO',
    27. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,日志轮转
    28. 'filename': 'user.log',
    29. 'maxBytes': 1024 * 1024 * 10, # 日志大小 10M'backupCount': 10, # 日志文件保存数量限制
    30. 'encoding': 'utf 8',
    31. 'formatter': 'standard',
    32. }, # 保存到文件
    33. 'file debug handler': {
    34. 'level': 'DEBUG',
    35. 'class': 'logging.FileHandler', # 保存到文件
    36. 'filename': 'test.log', # 日志存放的路径
    37. 'encoding': 'utf 8', # 日志文件的编码
    38. 'formatter': 'test',
    39. },
    40. 'file info_standard handler': {
    41. 'level': 'INFO', # 日志处理的级别限制
    42. 'class': 'logging.handlers.RotatingFileHandler',
    43. 'filename': 'zx.log',
    44. 'maxBytes': 1024 * 1024 * 10, # 日志大小 10M'backupCount': 10, # 日志文件保存数量限制
    45. 'encoding': 'utf 8',
    46. 'formatter': 'standard' # 日志格式
    47. },
    48. '': {
    49. 'level': 'INFO', # 日志处理的级别限制
    50. 'class': 'logging.handlers.RotatingFileHandler',
    51. 'filename': 'zx.log',
    52. 'maxBytes': 1024 * 1024 * 10, # 日志大小 10M'backupCount': 10, # 日志文件保存数量限制
    53. 'encoding': 'utf 8',
    54. 'formatter': 'standard' # 日志格式
    55. }, # 在主文件中调用setting中没有配置的handler,就会调用没有名字的
    56. },
    57. # 日志记录器
    58. 'loggers': {
    59. 'logger1': { # 导入时logging.getLogger时使用的app name
    60. 'handlers': ['console WARNING handler'], # 日志分配到哪个handlers中
    61. 'level': 'DEBUG', # 日志记录的级别限制
    62. 'propagate': False,
    63. # 默认为True,向上(更高级别的logger)传递,设置为False即可,否则会一份日志向上层层传递
    64. },
    65. 'logger2': {
    66. 'handlers': ['console WARNING handler', 'file debug handler'],
    67. 'level': 'INFO',
    68. 'propagate': False,
    69. },
    70. 'logger3': {
    71. 'handlers': ['file info_standard handler', 'file debug handler'],
    72. 'level': 'INFO',
    73. 'propagate': False,
    74. },
    75. }
    76. }
    77. # 注:进行日志轮转的日志文件,不能和其他handler共用,不然会导致文件被占用无法更名而报错!
    78. # logger 负责产生不同级别的日志,然后将日志传给handler,handler将logger产生的日志进行处理

    3、日志的使用

    1. import settings
    2. import logging.config # 可以导入logging
    3. logging.config.dictConfig(settings.LOGGING_DIC) # 将配置字典加载进来
    4. # logger1 = logging.getLogger('logger1')
    5. # logger1.info('xxx登录了')
    6. logger2 = logging.getLogger('logger2')
    7. logger2.warning('xxx充值了5毛钱')

    (1)可以根据 日志记录器Logger 和 日志处理器Handler 的level参数对日志进行分类;

    比如:

       

    (2)没有名字的'handler',运用在主文件中调用setting中没有配置的handler,就会调用没有名字的;

    例:

    '': {
        'level': 'INFO',  # 日志处理的级别限制
        'class': 'logging.handlers.RotatingFileHandler',
        'filename': 'zx.log',
        'maxBytes': 1024 * 1024 * 10,  # 日志大小 10M'backupCount': 10, # 日志文件保存数量限制
        'encoding': 'utf 8',
        'formatter': 'standard'  # 日志格式
    }, 

    (3)日志的轮转,就是日志的大小超过一定大小,就重新命名;

    'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,日志轮转
    'filename': 'user.log',
    'maxBytes': 1024 * 1024 * 10,  # 日志大小 10M
    'backupCount': 10,  # 日志文件保存数量限制
    
  • 相关阅读:
    leetcode 122. 买卖股票的最佳时机 II 贪心
    安利几个小技巧教会你ppt如何转pdf
    【EI会议征稿】第八届能源系统、电气与电力国际学术会议(ESEP 2023)
    【深度学习】NLP,Transformer讲解,代码实战
    m基于Matlab的fir和iir数字滤波器的设计与仿真
    Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理
    【JavaSE】类与对象(下)this引用是什么?构造方法是什么?
    低代码、零代码、免编码平台—对企业有什么优势?
    离散时间系统模型
    抓包工具 Charles 使用手册
  • 原文地址:https://blog.csdn.net/qq_43734870/article/details/139859833