From 49a1ee715bec33b085c5e4bcbd966f1c7a31ae6e Mon Sep 17 00:00:00 2001 From: AI Engineer Date: Thu, 4 Jun 2026 18:16:15 +0800 Subject: [PATCH] publish v1.5.1 --- CHANGELOG.md | 8 ++++++++ writer.go | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ff274e..ad007d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [1.5.1] - 2026-06-04 +- **缺陷修复: 异步控制台日志丢失**: + - **修复**: 在 `writerService.processLog` 中补充了默认的回退逻辑。当处于异步 `starter` 运行模式下,且日志的 `writer` 和 `file` 都为 `nil`(即未配置特定的输出目标,本应输出到控制台)时,不再静默丢弃该日志,而是默认回退调用 `fmt.Println` 并在控制台打印渲染后的视图。 + +## [1.5.0] - 2026-05-10 +- **全栈基础设施对齐**: + - 将所有内部依赖统一升级至 `v1.5.0` 语义版本。 + ## [1.3.2] - 2026-05-13 - **功能增强: 引入摩擦消除工具 `As`**: - **泛型支持**: 新增全局泛型函数 `log.As[T](v T, err error) T`,仿照 `cast.As` 设计,自动记录错误并返回零值,极大简化了带 error 返回值的函数链式调用。 diff --git a/writer.go b/writer.go index 386d636..fb63f91 100644 --- a/writer.go +++ b/writer.go @@ -25,7 +25,7 @@ type logPayload struct { // writerService manages the background writing of log entries. type writerService struct { Running atomic.Bool - StopChan chan bool + StopChan chan struct{} LogChannel chan logPayload Dropped atomic.Uint64 Writers atomic.Value // []Writer @@ -90,10 +90,13 @@ func GetDroppedLogs() uint64 { // Start implements starter.Service interface. func (s *writerService) Start(_ context.Context, _ *Logger) error { + s.FilesLock.Lock() + defer s.FilesLock.Unlock() if !s.Running.CompareAndSwap(false, true) { return nil } - s.StopChan = make(chan bool) + s.LogChannel = make(chan logPayload, 10000) + s.StopChan = make(chan struct{}) go s.writerRunner() return nil } @@ -163,6 +166,9 @@ func (s *writerService) processLog(payload logPayload) { payload.writer.Log(payload.entry, payload.buf) } else if payload.file != nil { payload.file.Write(time.Now(), payload.buf) + } else { + // 默认回退到控制台打印 + fmt.Println(Viewable(string(payload.buf))) } }