aliyun_log.py 2.4 KB

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