aliyun_log.py 2.4 KB

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