feat: 后台服务模式 + 日志滚动 + 修复 llm_usage 表兼容性
- 新增 logger.rs(tracing-appender,日滚日志,.data/logs/) - service 子命令:等同 listen --llm 但日志同时写入文件 - systemd/ias.service 单元文件 - 迁移 0007:ALTER TABLE llm_usage ADD COLUMN IF NOT EXISTS 修复与 iPet 旧表的结构冲突 - ias usage 命令可正常查询 Token 统计 - 日志滚动保留 7 天,自动删除旧文件
This commit is contained in:
+17
-9
@@ -3,6 +3,7 @@ mod config;
|
||||
mod context;
|
||||
mod db;
|
||||
mod llm;
|
||||
mod logger;
|
||||
mod scheduler;
|
||||
mod state;
|
||||
mod tools;
|
||||
@@ -24,12 +25,9 @@ use wechat::client::WeChatClient;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
tracing_subscriber::fmt()
|
||||
.with_env_filter(
|
||||
EnvFilter::try_from_default_env()
|
||||
.unwrap_or_else(|_| EnvFilter::new("info")),
|
||||
)
|
||||
.init();
|
||||
let cli = Cli::parse();
|
||||
let is_service = matches!(cli.command, Commands::Service);
|
||||
logger::init_logger(Some(".data/logs"), is_service);
|
||||
|
||||
dotenvy::dotenv().ok();
|
||||
|
||||
@@ -54,8 +52,6 @@ async fn main() {
|
||||
// 文件状态管理器(降级方案)
|
||||
let file_state = state::StateManager::new(&config.storage.state_dir);
|
||||
|
||||
let cli = Cli::parse();
|
||||
|
||||
match cli.command {
|
||||
Commands::Login { timeout } => {
|
||||
cmd_login(timeout, &database, &file_state).await;
|
||||
@@ -79,6 +75,9 @@ async fn main() {
|
||||
Commands::Usage { since, until, model } => {
|
||||
cmd_usage(&database, since, until, model).await;
|
||||
}
|
||||
Commands::Service => {
|
||||
cmd_listen(true, false, &database, &file_state, &config, &memory_store).await
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,7 +257,16 @@ async fn cmd_listen(
|
||||
|
||||
// 创建 Conversation
|
||||
let mut conv = match Conversation::new(cfg) {
|
||||
Ok(c) => {
|
||||
Ok(mut c) => {
|
||||
// 设置 db_pool 并加载历史消息
|
||||
if let Some(db) = database {
|
||||
let session = c.session();
|
||||
{
|
||||
let mut s = session.lock().await;
|
||||
s.db_pool = Some(Arc::new(db.pool().clone()));
|
||||
s.load_recent_messages(20).await;
|
||||
}
|
||||
}
|
||||
info!("LLM 已初始化: {} / {}", c.provider_name(), c.model());
|
||||
c
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user