refactor: 重构日志系统并优化线程池配置
重构日志系统,使用loguru替代print语句,提升日志管理能力。优化线程池配置,根据CPU核心数动态设置线程池大小。将任务执行逻辑移至worker.py,提高代码可维护性。
This commit is contained in:
parent
8e7dd21839
commit
7a19ca02bf
@ -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()
|
@ -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
49
main.py
@ -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
27
worker.py
Normal 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)
|
Loading…
Reference in New Issue
Block a user