refactor: 重构日志系统并优化线程池配置

重构日志系统,使用loguru替代print语句,提升日志管理能力。优化线程池配置,根据CPU核心数动态设置线程池大小。将任务执行逻辑移至worker.py,提高代码可维护性。
This commit is contained in:
shikong 2025-03-21 00:55:10 +08:00
parent 8e7dd21839
commit 7a19ca02bf
Signed by: Shikong
GPG Key ID: BD85FF18B373C341
4 changed files with 93 additions and 42 deletions

View File

@ -1,15 +1,21 @@
from reloading import reloading
from loguru import logger
logger.add("log/console.log",
rotation="100 MB",
encoding="utf-8",
filter=lambda record: record["extra"].get("name") == "console")
console_log = logger.bind(name="console")
def console_listener(tab):
try:
# 监听控制台
print("[console.log] 开始监听控制台")
console_log.info("[console.log] 开始监听控制台")
tab.console.start()
steps = tab.console.steps()
for log in steps:
# print("[console.log]", log)
print(f"[console.log] {log.text}")
console_log.info(f"[console.log] {log.text}")
finally:
print("[console.log] 停止监听控制台")
console_log.info("[console.log] 停止监听控制台")
tab.console.stop()

View File

@ -1,36 +1,47 @@
import utils
from loguru import logger
def network_listener(tab):
logger.add("log/network.log",
rotation="100 MB",
encoding="utf-8",
filter=lambda record: record["extra"].get("name") == "network")
network_log = logger.bind(name="network")
def network_listener(tab, targets=[]):
try:
# 监听网络
print("[network.log] 开始监听网络")
tab.listen.start(targets=["/api/"])
network_log.info("[network.log] 开始监听网络")
tab.listen.start(targets=targets)
for log in tab.listen.steps():
print("=" * 50)
print(f"[network.log] {log.method} {log.url} {'request'} {''}")
print("=" * 50 + '\t' + "request")
print("=" * 50 + '\t' + "request.headers")
network_log.info("=" * 50)
network_log.info(f"[network.log] {log.method} {log.url}")
network_log.info("=" * 50 + '\t' + "request")
network_log.info("=" * 50 + '\t' + "request.headers")
for key in log.request.headers.keys():
print(key, log.request.headers[key])
network_log.info("{}, {}", key, log.request.headers[key])
if 'Content-Type' in log.request.headers:
reqType = log.request.headers['Content-Type']
if reqType == 'application/json':
print("=" * 50 + '\t' + "request.body")
print(utils.format_json(log.request.body))
network_log.info("=" * 50 + '\t' + "request.body")
network_log.info(utils.format_json(log.request.body))
print(vars(log.request))
# print(vars(log.request))
for key in log.response.headers.keys():
network_log.info("{}, {}", key, log.response.headers[key])
if 'Content-Type' in log.response.headers:
respType = log.response.headers['Content-Type']
if respType == 'application/json':
print("=" * 50 + '\t' + "response.body")
print(utils.format_json(log.response.body))
network_log.info("=" * 50 + '\t' + "response.body")
network_log.info(utils.format_json(log.response.body))
print(vars(log.response))
# print(vars(log.response))
except Exception as e:
print("[network.log] 监听网络出错")
print(e)
network_log.error("[network.log] 监听网络出错")
network_log.error(e)
finally:
print("[network.log] 停止监听网络")
network_log.info("[network.log] 停止监听网络")
tab.listen.stop()

49
main.py
View File

@ -1,3 +1,17 @@
from loguru import logger
logger.remove()
import sys
logger.add(sys.stdout,
filter=lambda record: record["extra"].get("name") == "runtime")
logger.add("log/runtime.log",
rotation="100 MB",
encoding="utf-8",
filter=lambda record: record["extra"].get("name") == "runtime")
log = logger.bind(name="runtime")
from DrissionPage import Chromium, ChromiumOptions, SessionPage
from concurrent.futures import ThreadPoolExecutor
import atexit
@ -5,7 +19,7 @@ import atexit
import listener.console
import listener.network
# 初始化浏览器
options = ChromiumOptions()
# 无头模式
# options.headless()
@ -17,30 +31,23 @@ print(os.environ)
browser = Chromium(options)
tab = browser.latest_tab
executor = ThreadPoolExecutor(max_workers=2)
import os
# 初始化线程池
cpu_count = os.cpu_count()
cpu_count = cpu_count if cpu_count is not None else 1
executor = ThreadPoolExecutor(max_workers=cpu_count * 2)
executor.submit(listener.console.console_listener, tab)
executor.submit(listener.network.network_listener, tab)
tab.get(url='http://127.0.0.1:24613')
tab.wait.url_change(text="/auth/login", timeout=3, raise_err=False)
if tab.url.endswith("/auth/login"):
tab.wait.doc_loaded()
tab.actions.move_to("@@t()=input@@type=text").click().type("shikong")
tab.actions.move_to("@@t()=input@@type=password").click().type("123+AbC")
tab.actions.move_to("@@t()=button@@text():登录").click()
tab.change_mode()
items = tab.eles("t:body")
for item in items:
print(item)
def exit():
print('exit')
log.info('退出')
browser.quit()
executor.shutdown()
executor.shutdown(False)
atexit.register(exit)
from worker import run_task;
try:
run_task(browser, executor, log)
except Exception as e:
log.error(e)

27
worker.py Normal file
View File

@ -0,0 +1,27 @@
from listener.console import *
from listener.network import *
def run_task(browser, executor, log):
tab = browser.latest_tab
executor.submit(console_listener, tab)
executor.submit(network_listener, tab, targets=[
"/api"
])
tab.get(url='http://127.0.0.1:24613')
tab.wait.url_change(text="/auth/login", timeout=3, raise_err=False)
if tab.url.endswith("/auth/login"):
tab.wait.doc_loaded()
tab.actions.move_to("@@t()=input@@type=text").click().type("shikong")
tab.actions.move_to("@@t()=input@@type=password").click().type("123+AbC")
tab.actions.move_to("@@t()=button@@text():登录").click()
# tab.change_mode()
items = tab.eles("t:body")
for item in items:
print(item)