aliyun_log.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. # -*- coding: utf-8 -*-
  2. # @Author: 罗俊辉
  3. # @Time: 2023/10/23
  4. """
  5. 公共方法,包含:生成log / 删除log
  6. """
  7. import json
  8. from aliyun.log import LogClient, PutLogsRequest, LogItem
  9. from datetime import date, timedelta
  10. from datetime import datetime
  11. import time
  12. proxies = {"http": None, "https": None}
  13. class AliyunLogger:
  14. # 统一获取当前时间 <class 'datetime.datetime'> 2022-04-14 20:13:51.244472
  15. now = datetime.now()
  16. # 昨天 <class 'str'> 2022-04-13
  17. yesterday = (date.today() + timedelta(days=-1)).strftime("%Y-%m-%d")
  18. # 今天 <class 'datetime.date'> 2022-04-14
  19. today = date.today()
  20. # 明天 <class 'str'> 2022-04-15
  21. tomorrow = (date.today() + timedelta(days=1)).strftime("%Y-%m-%d")
  22. # 写入阿里云日志
  23. @staticmethod
  24. def logging(
  25. code, platform, mode, env, message, data=None, trace_id=None, account=None
  26. ):
  27. """
  28. 写入阿里云日志
  29. 测试库: https://sls.console.aliyun.com/lognext/project/crawler-log-dev/logsearch/crawler-log-dev
  30. 正式库: https://sls.console.aliyun.com/lognext/project/crawler-log-prod/logsearch/crawler-log-prod
  31. """
  32. # 设置阿里云日志服务的访问信息
  33. if data is None:
  34. data = {}
  35. accessKeyId = "LTAIWYUujJAm7CbH"
  36. accessKey = "RfSjdiWwED1sGFlsjXv0DlfTnZTG1P"
  37. if env == "dev":
  38. project = "crawler-log-dev"
  39. logstore = "crawler-log-dev"
  40. endpoint = "cn-hangzhou.log.aliyuncs.com"
  41. else:
  42. project = "crawler-log-prod"
  43. logstore = "crawler-fetch"
  44. endpoint = "cn-hangzhou.log.aliyuncs.com"
  45. # 创建 LogClient 实例
  46. client = LogClient(endpoint, accessKeyId, accessKey)
  47. log_group = []
  48. log_item = LogItem()
  49. """
  50. 生成日志消息体格式,例如
  51. crawler:xigua
  52. message:不满足抓取规则
  53. mode:search
  54. timestamp:1686656143
  55. """
  56. message = message.replace("\r", " ").replace("\n", " ")
  57. contents = [
  58. (f"TraceId", str(trace_id)),
  59. (f"code", str(code)),
  60. (f"platform", str(platform)),
  61. (f"mode", str(mode)),
  62. (f"message", str(message)),
  63. (f"data", json.dumps(data, ensure_ascii=False) if data else ""),
  64. (f"account", str(account)),
  65. ("timestamp", str(int(time.time()))),
  66. ]
  67. log_item.set_contents(contents)
  68. log_group.append(log_item)
  69. # 写入日志
  70. request = PutLogsRequest(
  71. project=project,
  72. logstore=logstore,
  73. topic="",
  74. source="",
  75. logitems=log_group,
  76. compress=False,
  77. )
  78. client.put_logs(request)