You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将logger日志发送至Seq并解决自定义日志格式不生效问题

问题原因

seqlog 库默认采用结构化上报逻辑,会将日志的各字段(如日志级别、request_id、文件名等)单独作为属性上报给 Seq,不会主动应用你配置的日志格式化字符串——你之前设置的格式仅作用于控制台流输出的 Handler,未同步到 Seq 对应的 Handler 上。


解决方案

方案1:客户端指定Seq Handler的格式化器(推荐,一次配置全量生效)

在调用 seqlog.log_to_seq() 时,传入你自定义的 Formatter 实例即可,完整代码如下:

import logging
import seqlog

# 注意:这里不需要加f前缀,%开头的是logging模块的内置占位符
_log_format = "%(asctime)s - [%(levelname)s] - request_id=%(request_id)s - %(name)s - (%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"
# 实例化自定义格式化器
custom_formatter = logging.Formatter(_log_format)

seqlog.log_to_seq(
   server_url="http://localhost:5341/",
   api_key="My API Key",
   level=logging.INFO,
   batch_size=10,
   auto_flush_timeout=10,
   override_root_logger=True,
   formatter=custom_formatter,  # 新增此行,指定Seq上报使用的格式化器
)

配置完成后 Seq 中存储的消息内容就会和控制台输出的格式完全一致,同时各结构化字段依然会作为独立属性保存在 Seq 中,不影响后续筛选查询。

方案2:Seq服务端修改全局显示模板

如果不需要客户端统一控制格式,也可以直接在 Seq 后台的「设置」-「默认消息模板」中,配置你需要的显示格式,示例如下:
{@Timestamp:yyyy-MM-dd HH:mm:ss,fff} - [{@Level}] - request_id={request_id} - {Logger} - ({Filename}).{MemberName}({LineNumber}) - {@Message}
这种方式不需要修改代码,仅调整服务端显示逻辑即可。


内容的提问来源于stack exchange,提问作者SergeyS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:42:00