aliyun_log.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import time
  2. import asyncio
  3. from unittest import result
  4. from aliyun.log import LogClient, PutLogsRequest, LogItem
  5. from app.core.config import settings
  6. from app.core.logger import logger
  7. class AliyunLogClient:
  8. def __init__(self, project, logstore):
  9. self.project = project
  10. self.logstore = logstore
  11. self.client = LogClient(
  12. f"{settings.ALIYUN_REGION_ID}.log.aliyuncs.com",
  13. settings.ALIYUN_ACCESS_KEY_ID,
  14. settings.ALIYUN_ACCESS_KEY_SECRET
  15. )
  16. self.enabled = settings.ENABLE_MONITOR
  17. def write_log(self, message, level="INFO", **kwargs):
  18. """写入阿里云日志"""
  19. if not self.enabled:
  20. return
  21. try:
  22. log_item = LogItem(timestamp=int(time.time()))
  23. contents = [
  24. ("level", level),
  25. ("message", str(message)),
  26. ("timestamp", str(int(time.time())))
  27. ]
  28. for key, value in kwargs.items():
  29. contents.append((str(key), str(value)))
  30. log_item.set_contents(contents)
  31. request = PutLogsRequest(
  32. project=self.project,
  33. logstore=self.logstore,
  34. logitems=[log_item]
  35. )
  36. self.client.put_logs(request)
  37. except Exception as e:
  38. logger.error(f"Failed to write log to Aliyun SLS: {e}")
  39. async def async_write_log(self, message, level="INFO", **kwargs):
  40. """异步写入阿里云日志"""
  41. if not self.enabled:
  42. return
  43. loop = asyncio.get_event_loop()
  44. await loop.run_in_executor(None, lambda: self.write_log(message, level, **kwargs))
  45. async def async_put_log(self, keyword, status, step="",msg="",result=""):
  46. """异步记录API请求状态"""
  47. await self.async_write_log(
  48. level="INFO" if status == "success" else "ERROR",
  49. keyword=keyword,
  50. status=status,
  51. message=msg,
  52. step_name=step,
  53. result=result
  54. )
  55. # 使用示例
  56. ali_log_client = AliyunLogClient("crawler-log-prod", "wx_trend")