上传文件至 Log4p
This commit is contained in:
parent
3866df01a3
commit
e5aa752c59
11
Log4p/DecoratorsTools.py
Normal file
11
Log4p/DecoratorsTools.py
Normal file
|
@ -0,0 +1,11 @@
|
|||
import warnings
|
||||
|
||||
def deprecated(use_func, d_version):
|
||||
def decorator(func):
|
||||
async def wrapper(*args, **kwargs):
|
||||
warnings.warn(f"The '{func.__name__}' function is deprecated, "
|
||||
f"use '{use_func}' instead. Deprecated in version {d_version}.",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
return await func(*args, **kwargs)
|
||||
return wrapper
|
||||
return decorator
|
35
Log4p/HttpHander.py
Normal file
35
Log4p/HttpHander.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
import logging
|
||||
import requests
|
||||
import httpx
|
||||
|
||||
class HTTPhandler(logging.Handler):
|
||||
def __init__(self, url):
|
||||
super().__init__()
|
||||
self.url = url
|
||||
|
||||
def emit(self, record):
|
||||
log_entry = self.format(record)
|
||||
payload = {'log': log_entry}
|
||||
try:
|
||||
response = requests.post(self.url, json=payload)
|
||||
if not response.ok:
|
||||
raise ValueError(response.text)
|
||||
except Exception as e:
|
||||
logging.error("Failed to send log to %s: %s", self.url, e)
|
||||
|
||||
class AsyncHTTPhandler(logging.Handler):
|
||||
def __init__(self, url):
|
||||
super().__init__()
|
||||
self.url = url
|
||||
|
||||
async def emit(self, record):
|
||||
log_entry = self.format(record)
|
||||
payload = {'log': log_entry}
|
||||
try:
|
||||
async with httpx.AsyncClient(timeout=120,max_redirects=5) as client:
|
||||
response = await client.post(self.url, json=payload)
|
||||
if not response.is_success:
|
||||
raise ValueError(await response.text())
|
||||
except Exception as e:
|
||||
logging.error("Failed to send log to %s: %s", self.url, e)
|
||||
|
BIN
Log4p/__init__.py
Normal file
BIN
Log4p/__init__.py
Normal file
Binary file not shown.
28
Log4p/websocketHander.py
Normal file
28
Log4p/websocketHander.py
Normal file
|
@ -0,0 +1,28 @@
|
|||
import logging
|
||||
import asyncio
|
||||
import websockets
|
||||
|
||||
class WebsocketHandler(logging.Handler):
|
||||
def __init__(self, server_address):
|
||||
super().__init__()
|
||||
self.server_address = server_address
|
||||
|
||||
async def send_log_async(self, message):
|
||||
async with websockets.connect(self.server_address) as websocket:
|
||||
await websocket.send(message)
|
||||
|
||||
def send_log_sync(self, message):
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
loop.run_until_complete(self.send_log_async(message))
|
||||
|
||||
def emit(self, record):
|
||||
log_entry = self.format(record)
|
||||
|
||||
if asyncio.get_event_loop().is_running():
|
||||
asyncio.create_task(self.send_log_async(log_entry))
|
||||
else:
|
||||
try:
|
||||
self.send_log_sync(log_entry)
|
||||
except Exception as e:
|
||||
logging.warning("Failed to send log synchronously: %s", e)
|
Loading…
Reference in New Issue
Block a user