调整 日志输出格式

This commit is contained in:
2026-04-29 16:28:23 +08:00
parent 8e4c2eef98
commit 02b3470075
8 changed files with 303 additions and 142 deletions
+66 -5
View File
@@ -1,9 +1,11 @@
from __future__ import annotations
import argparse
import logging
import os
import sys
from pathlib import Path
import time
def bootstrap_prefect_env() -> None:
@@ -22,28 +24,65 @@ def bootstrap_prefect_env() -> None:
bootstrap_prefect_env()
from prefect import flow, task
from prefect import flow, get_run_logger, task
from inventory_analytics.logging_utils import exception_fields
from inventory_analytics.channel_inventory_sync.entrypoint import main as channel_inventory_sync_main
from inventory_analytics.batch_inventory_report.cli import main as batch_inventory_report_main
@task(name="run-channel-inventory-sync")
def run_channel_inventory_sync_task() -> None:
logger = get_run_logger()
started_at = time.monotonic()
logger.info("渠道库存统计开始,action=all,安全日志模式=enabled")
original_argv = sys.argv[:]
original_safe_logs = os.environ.get("INVENTORY_SAFE_LOGS")
root_logger = logging.getLogger()
original_handlers = root_logger.handlers[:]
original_level = root_logger.level
try:
os.environ["INVENTORY_SAFE_LOGS"] = "1"
sys.argv = ["sync_channel_inventory.py", "--action", "all"]
exit_code = channel_inventory_sync_main()
except Exception as exc: # noqa: BLE001
logger.error("渠道库存统计异常,%s", exception_fields(exc))
raise
finally:
sys.argv = original_argv
if original_safe_logs is None:
os.environ.pop("INVENTORY_SAFE_LOGS", None)
else:
os.environ["INVENTORY_SAFE_LOGS"] = original_safe_logs
root_logger.handlers = original_handlers
root_logger.setLevel(original_level)
if exit_code != 0:
logger.error("渠道库存统计失败,退出码=%s", exit_code)
raise RuntimeError(f"渠道库存统计执行失败,退出码: {exit_code}")
logger.info("渠道库存统计完成,耗时毫秒=%s", int((time.monotonic() - started_at) * 1000))
@task(name="run-batch-inventory-report")
def run_batch_inventory_report_task(output: str = "", feishu_table: str = "批次库存", skip_feishu_sync: bool = False) -> None:
def run_batch_inventory_report_task(
output: str = "",
feishu_table: str = "批次库存",
skip_feishu_sync: bool = False,
skip_report_output: bool = True,
) -> None:
logger = get_run_logger()
started_at = time.monotonic()
logger.info(
"批次库存统计开始,飞书同步=%s,本地报表输出=%s,安全日志模式=enabled",
"disabled" if skip_feishu_sync else "enabled",
"skipped" if skip_report_output else "enabled",
)
original_argv = sys.argv[:]
original_safe_logs = os.environ.get("INVENTORY_SAFE_LOGS")
root_logger = logging.getLogger()
original_handlers = root_logger.handlers[:]
original_level = root_logger.level
try:
os.environ["INVENTORY_SAFE_LOGS"] = "1"
sys.argv = ["generate_batch_inventory_report.py"]
if output:
sys.argv.extend(["--output", output])
@@ -51,11 +90,25 @@ def run_batch_inventory_report_task(output: str = "", feishu_table: str = "批
sys.argv.extend(["--feishu-table", feishu_table])
if skip_feishu_sync:
sys.argv.append("--skip-feishu-sync")
if skip_report_output:
sys.argv.append("--skip-report-output")
sys.argv.append("--safe-logs")
exit_code = batch_inventory_report_main()
except Exception as exc: # noqa: BLE001
logger.error("批次库存统计异常,%s", exception_fields(exc))
raise
finally:
sys.argv = original_argv
if original_safe_logs is None:
os.environ.pop("INVENTORY_SAFE_LOGS", None)
else:
os.environ["INVENTORY_SAFE_LOGS"] = original_safe_logs
root_logger.handlers = original_handlers
root_logger.setLevel(original_level)
if exit_code != 0:
logger.error("批次库存统计失败,退出码=%s", exit_code)
raise RuntimeError(f"批次库存统计报表执行失败,退出码: {exit_code}")
logger.info("批次库存统计完成,耗时毫秒=%s", int((time.monotonic() - started_at) * 1000))
@flow(name="inventory-channel-inventory-sync")
@@ -68,8 +121,14 @@ def inventory_batch_inventory_report_flow(
output: str = "",
feishu_table: str = "批次库存",
skip_feishu_sync: bool = False,
skip_report_output: bool = True,
) -> None:
run_batch_inventory_report_task(output=output, feishu_table=feishu_table, skip_feishu_sync=skip_feishu_sync)
run_batch_inventory_report_task(
output=output,
feishu_table=feishu_table,
skip_feishu_sync=skip_feishu_sync,
skip_report_output=skip_report_output,
)
def parse_args() -> argparse.Namespace:
@@ -81,6 +140,7 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--output", default="", help="批次库存统计输出路径,可选")
parser.add_argument("--feishu-table", default="批次库存", help="批次库存统计同步目标飞书表名")
parser.add_argument("--skip-feishu-sync", action="store_true", help="批次库存统计只生成本地文件,不写飞书")
parser.add_argument("--write-report-output", action="store_true", help="Prefect 执行批次库存统计时同时生成本地报表文件")
return parser.parse_args()
@@ -90,17 +150,18 @@ def main() -> None:
"output": args.output,
"feishu_table": args.feishu_table,
"skip_feishu_sync": args.skip_feishu_sync,
"skip_report_output": not args.write_report_output,
}
if args.serve_channel_inventory_sync:
inventory_channel_inventory_sync_flow.serve(
name="inventory-channel-inventory-sync-daily-0915",
name="channel-inventory-sync-0915",
cron="15 9 * * *",
tags=["inventory", "feishu", "channel-inventory-sync"],
)
return
if args.serve_batch_inventory_report:
inventory_batch_inventory_report_flow.serve(
name="inventory-batch-inventory-report-daily-0915",
name="batch-inventory-repor-0915",
cron="15 9 * * *",
parameters=flow_kwargs,
tags=["inventory", "feishu", "batch-inventory-report"],