log.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. # File : log.py
  4. # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
  5. # Date : 2022/9/6
  6. import os
  7. import logging
  8. from logging import handlers
  9. import sys
  10. dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
  11. LOG_ROOT = dirname
  12. print(LOG_ROOT)
  13. # logging.basicConfig(
  14. # # level=logging.INFO, # 控制台打印的日志级别
  15. # level=logging.DEBUG, # 控制台打印的日志级别
  16. # filename='dr.log', # 将日志写入log_new.log文件中
  17. # filemode='a', # 模式,有w和a,w就是写模式,每次都会重新写日志,覆盖之前的日志 a是追加模式,默认如果不写的话,就是追加模式
  18. # # format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
  19. # format="%(asctime)s:%(levelname)s:%(name)s -- %(message)s", datefmt="%Y/%m/%d %H:%M:%S" # 日志格式
  20. # )
  21. def get_logger(log_filename, level=logging.DEBUG, when='D', back_count=0):
  22. """
  23. https://blog.csdn.net/qq_39147299/article/details/124455632
  24. :brief 日志记录
  25. :param log_filename: 日志名称
  26. :param level: 日志等级 critical > error > warning > info > debug 当设置某个级别之后,把它低的不会被记录,例如级别设置为warning,则info和debug则会被丢弃
  27. :param when: 间隔时间:
  28. S:秒
  29. M:分
  30. H:小时
  31. D:天
  32. W:每星期(interval==0时代表星期一)
  33. midnight: 每天凌晨
  34. :param back_count: 备份文件的个数,若超过该值,就会自动删除
  35. :return: logger
  36. """
  37. # 创建一个日志器。提供了应用程序接口
  38. logger = logging.getLogger(log_filename)
  39. # 设置日志输出的最低等级,低于当前等级则会被忽略
  40. logger.setLevel(level)
  41. # 创建日志输出路径
  42. # log_path = os.path.join(LOG_ROOT, "logs")
  43. base_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) # 上级目录
  44. log_path = os.path.join(base_path, f'logs')
  45. if not os.path.exists(log_path):
  46. os.mkdir(log_path)
  47. log_file_path = os.path.join(log_path, log_filename)
  48. # 创建格式器
  49. # formatter = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s',datefmt="%Y/%m/%d %H:%M:%S")
  50. formatter = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d]:%(levelname)s:%(name)s -- %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
  51. # 创建处理器:ch为控制台处理器,fh为文件处理器
  52. ch = logging.StreamHandler()
  53. ch.setLevel(level)
  54. # 输出到文件
  55. fh = logging.handlers.TimedRotatingFileHandler(
  56. filename=log_file_path,
  57. when=when,
  58. backupCount=back_count,
  59. encoding='utf-8')
  60. fh.setLevel(level)
  61. # 设置日志输出格式
  62. fh.setFormatter(formatter)
  63. ch.setFormatter(formatter)
  64. # 将处理器,添加至日志器中
  65. logger.addHandler(fh)
  66. logger.addHandler(ch)
  67. return logger
  68. logger = get_logger('dr.log')