aliyun_log.py 2.7 KB

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