mirror of
https://github.com/Shu-Ying/main_plugin_farm.git
synced 2026-10-30 06:09:59 +08:00
fixed # 修复astrbot日志未使用logging.basicConfig
This commit is contained in:
@@ -1,5 +1,11 @@
|
||||
# 更新日志
|
||||
|
||||
## 待发布
|
||||
|
||||
- 全部插件及私有共享模块日志接入AstrBot官方logger,保留启动下载进度。
|
||||
- 不再配置独立日志文件或修改宿主日志处理器;移除包内开发命令行入口。
|
||||
- 新增发布包日志规范检查,拒绝内置logging及自建日志处理器。
|
||||
|
||||
## 2.0.2 — 待发布
|
||||
|
||||
### 新增
|
||||
|
||||
@@ -2,14 +2,13 @@
|
||||
|
||||
import asyncio
|
||||
from collections import OrderedDict
|
||||
import logging
|
||||
import re
|
||||
from time import monotonic
|
||||
|
||||
import aiohttp
|
||||
from astrbot.api import logger
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
MAX_BYTES = 2 * 1024 * 1024
|
||||
MAX_ENTRIES = 16
|
||||
FETCH_TIMEOUT = 2
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
import asyncio
|
||||
import json
|
||||
import logging
|
||||
from pathlib import Path
|
||||
|
||||
from astrbot.api import AstrBotConfig
|
||||
from astrbot.api import logger
|
||||
from astrbot.api.event import AstrMessageEvent, filter
|
||||
from astrbot.api.message_components import At, Image
|
||||
from astrbot.api.star import Context, Star, StarTools
|
||||
@@ -16,9 +16,6 @@ from .runtime import Runtime, command_map
|
||||
COMMANDS = command_map('astrbot')
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class FarmPlugin(Star):
|
||||
def __init__(self, context: Context, config: AstrBotConfig):
|
||||
super().__init__(context)
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
"""AstrBot拥有日志配置和输出,插件不创建或关闭任何日志处理器。"""
|
||||
|
||||
|
||||
def open_logs(data_dir):
|
||||
return None, None
|
||||
|
||||
|
||||
def close_logs(file_handler, console_handler):
|
||||
pass
|
||||
@@ -10,6 +10,7 @@ import shlex
|
||||
from urllib.error import HTTPError, URLError
|
||||
from zipfile import BadZipFile
|
||||
|
||||
from .runtime_logging import open_logs, close_logs
|
||||
from ._vendor.farm_core import Catalogue, FarmService, Identity, SQLiteStore
|
||||
from ._vendor.farm_core.domain import FarmError
|
||||
from ._vendor.farm_core.commands import (
|
||||
@@ -133,6 +134,7 @@ class Runtime:
|
||||
self.rendering = None
|
||||
self.started = False
|
||||
self.log_handler = None
|
||||
self.console_handler = None
|
||||
self.legacy_source = self.data_dir / 'farm.db'
|
||||
self._resource_lock = asyncio.Lock()
|
||||
self._closing = False
|
||||
@@ -153,15 +155,9 @@ class Runtime:
|
||||
return
|
||||
epoch = self._start_epoch
|
||||
self.data_dir.mkdir(parents=True, exist_ok=True)
|
||||
self.log_handler = logging.FileHandler(
|
||||
self.data_dir / "farm-preview.log", encoding="utf-8",
|
||||
)
|
||||
self.log_handler.setFormatter(logging.Formatter(
|
||||
"%(asctime)s %(levelname)s %(name)s %(message)s",
|
||||
))
|
||||
logging.getLogger(__package__).setLevel(logging.INFO)
|
||||
logging.getLogger(__package__).addHandler(self.log_handler)
|
||||
self.log_handler, self.console_handler = open_logs(self.data_dir)
|
||||
try:
|
||||
logger.info('农场启动:正在检查作物版本和本地缓存')
|
||||
if self.resource_options_provider is not None:
|
||||
self.resource_source, self.service_url = (
|
||||
self.resource_options_provider()
|
||||
@@ -191,6 +187,8 @@ class Runtime:
|
||||
if self._closing or epoch != self._start_epoch:
|
||||
return
|
||||
self.started = True
|
||||
logger.info('农场启动完成(%s)',
|
||||
'图片可用' if self.rendering else '文字模式')
|
||||
logger.info("farm preview initialized schema=%s", SCHEMA_VERSION)
|
||||
|
||||
async def _prepare_resources(self):
|
||||
@@ -206,6 +204,7 @@ class Runtime:
|
||||
)
|
||||
validate_options(self.resource_source, self.service_url)
|
||||
resource = 'assets'
|
||||
logger.info('农场启动:正在准备图片素材和字体')
|
||||
selected = self.catalogue_release
|
||||
bundle_path = selected.bundle_path if selected else None
|
||||
if bundle_path is None:
|
||||
@@ -265,10 +264,8 @@ class Runtime:
|
||||
await self.store.close()
|
||||
self.started = False
|
||||
self._closing = False
|
||||
if self.log_handler:
|
||||
logging.getLogger(__package__).removeHandler(self.log_handler)
|
||||
self.log_handler.close()
|
||||
self.log_handler = None
|
||||
close_logs(self.log_handler, self.console_handler)
|
||||
self.log_handler = self.console_handler = None
|
||||
|
||||
async def execute(
|
||||
self, action, arguments, *, bot_id, platform, user_id, message_id,
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
"""真寻和NoneBot的日志生命周期;AstrBot构建使用宿主专用实现。"""
|
||||
|
||||
import logging
|
||||
|
||||
|
||||
def has_console_handler(target):
|
||||
while target is not None:
|
||||
if any(isinstance(handler, logging.StreamHandler)
|
||||
and not isinstance(handler, logging.FileHandler)
|
||||
and handler.level <= logging.INFO
|
||||
for handler in target.handlers):
|
||||
return True
|
||||
target = target.parent if target.propagate else None
|
||||
return False
|
||||
|
||||
|
||||
def open_logs(data_dir):
|
||||
target = logging.getLogger(__package__)
|
||||
file_handler = logging.FileHandler(
|
||||
data_dir / 'farm-preview.log', encoding='utf-8',
|
||||
)
|
||||
file_handler.setFormatter(logging.Formatter(
|
||||
'%(asctime)s %(levelname)s %(name)s %(message)s',
|
||||
))
|
||||
target.setLevel(logging.INFO)
|
||||
target.addHandler(file_handler)
|
||||
console_handler = None
|
||||
if not has_console_handler(target):
|
||||
console_handler = logging.StreamHandler()
|
||||
console_handler.setLevel(logging.INFO)
|
||||
console_handler.setFormatter(logging.Formatter(
|
||||
'%(asctime)s [农场] %(message)s', datefmt='%H:%M:%S',
|
||||
))
|
||||
target.addHandler(console_handler)
|
||||
return file_handler, console_handler
|
||||
|
||||
|
||||
def close_logs(file_handler, console_handler):
|
||||
target = logging.getLogger(__package__)
|
||||
for handler in (file_handler, console_handler):
|
||||
if handler is not None:
|
||||
target.removeHandler(handler)
|
||||
handler.close()
|
||||
Reference in New Issue
Block a user