123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import asyncio
- import traceback
- import time
- import json
- import datetime
- from aliyun.log import LogClient, PutLogsRequest, LogItem
- class LogService:
- def __init__(self, endpoint, access_key_id, access_key_secret, project, logstore):
- self.client = LogClient(endpoint, access_key_id, access_key_secret)
- self.project = project
- self.logstore = logstore
- self.queue = asyncio.Queue()
- self.running = False
- async def start(self):
- self.running = True
- asyncio.create_task(self._worker())
- async def stop(self):
- self.running = False
- async def log(self, contents: dict):
- """外部调用日志接口"""
- await self.queue.put(contents)
- async def _worker(self):
- while self.running:
- contents = await self.queue.get()
- try:
- await asyncio.to_thread(self._put_log, contents)
- except Exception as e:
- print(f"[Log Error] {e}")
- print(traceback.format_exc())
- def _put_log(self, contents: dict):
- timestamp = int(time.time())
- contents["datetime"] = datetime.datetime.now().__str__()
- safe_items = [
- (str(k), json.dumps(v) if isinstance(v, (dict, list)) else str(v))
- for k, v in contents.items()
- ]
- log_item = LogItem(timestamp=timestamp, contents=safe_items)
- req = PutLogsRequest(
- self.project, self.logstore, topic="", source="", logitems=[log_item]
- )
- self.client.put_logs(req)
|