logger_help.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2023/1/31
  4. """
  5. 公共方法,包含:生成log / 删除log / 下载方法 / 删除 weixinzhishu_chlsfiles / 过滤词库 / 保存视频信息至本地 txt / 翻译 / ffmpeg
  6. """
  7. from datetime import date, timedelta
  8. from loguru import logger
  9. import datetime
  10. import os
  11. import time
  12. class Common:
  13. # 统一获取当前时间 <class 'datetime.datetime'> 2022-04-14 20:13:51.244472
  14. now = datetime.datetime.now()
  15. # 昨天 <class 'str'> 2022-04-13
  16. yesterday = (date.today() + timedelta(days=-1)).strftime("%Y/%m/%d")
  17. # 今天 <class 'datetime.date'> 2022-04-14
  18. today = date.today()
  19. # 明天 <class 'str'> 2022-04-15
  20. tomorrow = (date.today() + timedelta(days=1)).strftime("%Y/%m/%d")
  21. # 使用 logger 模块生成日志
  22. @staticmethod
  23. def logger(log_type, crawler):
  24. """
  25. 使用 logger 模块生成日志
  26. """
  27. # 日志路径
  28. log_dir = f"./{crawler}/logs/"
  29. log_path = os.getcwd() + os.sep + log_dir
  30. if not os.path.isdir(log_path):
  31. os.makedirs(log_path)
  32. # 日志文件名
  33. log_name = time.strftime("%Y-%m-%d", time.localtime(time.time())) + f'-{crawler}-{log_type}.log'
  34. # 日志不打印到控制台
  35. logger.remove(handler_id=None)
  36. # rotation="500 MB",实现每 500MB 存储一个文件
  37. # rotation="12:00",实现每天 12:00 创建一个文件
  38. # rotation="1 week",每周创建一个文件
  39. # retention="10 days",每隔10天之后就会清理旧的日志
  40. # 初始化日志
  41. logger.add(log_dir + log_name, level="INFO", rotation='00:00')
  42. return logger
  43. # 清除日志,保留最近 10 个文件
  44. @classmethod
  45. def del_logs(cls, log_type, crawler):
  46. """
  47. 清除冗余日志文件
  48. :return: 保留最近 10 个日志
  49. """
  50. log_dir = f"./{crawler}/logs/"
  51. all_files = sorted(os.listdir(log_dir))
  52. all_logs = []
  53. for log in all_files:
  54. name = os.path.splitext(log)[-1]
  55. if name == ".log":
  56. all_logs.append(log)
  57. if len(all_logs) <= 10:
  58. pass
  59. else:
  60. for file in all_logs[:len(all_logs) - 10]:
  61. os.remove(log_dir + file)
  62. cls.logger(log_type, crawler).info("清除日志成功\n")
  63. # # 删除 charles 缓存文件,只保留最近的两个文件
  64. # @classmethod
  65. # def del_charles_files(cls, log_type, crawler):
  66. # # 目标文件夹下所有文件
  67. # all_file = sorted(os.listdir(f"./{crawler}/{crawler}_chlsfiles/"))
  68. # for file in all_file[0:-3]:
  69. # os.remove(f"./{crawler}/{crawler}_chlsfiles/{file}")
  70. # cls.logger(log_type, crawler).info("删除 charles 缓存文件成功\n")
  71. if __name__ == "__main__":
  72. pass