publish v1.5.1
This commit is contained in:
parent
7b3f56b01b
commit
49a1ee715b
@ -1,5 +1,13 @@
|
|||||||
# Changelog
|
# 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
|
## [1.3.2] - 2026-05-13
|
||||||
- **功能增强: 引入摩擦消除工具 `As`**:
|
- **功能增强: 引入摩擦消除工具 `As`**:
|
||||||
- **泛型支持**: 新增全局泛型函数 `log.As[T](v T, err error) T`,仿照 `cast.As` 设计,自动记录错误并返回零值,极大简化了带 error 返回值的函数链式调用。
|
- **泛型支持**: 新增全局泛型函数 `log.As[T](v T, err error) T`,仿照 `cast.As` 设计,自动记录错误并返回零值,极大简化了带 error 返回值的函数链式调用。
|
||||||
|
|||||||
10
writer.go
10
writer.go
@ -25,7 +25,7 @@ type logPayload struct {
|
|||||||
// writerService manages the background writing of log entries.
|
// writerService manages the background writing of log entries.
|
||||||
type writerService struct {
|
type writerService struct {
|
||||||
Running atomic.Bool
|
Running atomic.Bool
|
||||||
StopChan chan bool
|
StopChan chan struct{}
|
||||||
LogChannel chan logPayload
|
LogChannel chan logPayload
|
||||||
Dropped atomic.Uint64
|
Dropped atomic.Uint64
|
||||||
Writers atomic.Value // []Writer
|
Writers atomic.Value // []Writer
|
||||||
@ -90,10 +90,13 @@ func GetDroppedLogs() uint64 {
|
|||||||
|
|
||||||
// Start implements starter.Service interface.
|
// Start implements starter.Service interface.
|
||||||
func (s *writerService) Start(_ context.Context, _ *Logger) error {
|
func (s *writerService) Start(_ context.Context, _ *Logger) error {
|
||||||
|
s.FilesLock.Lock()
|
||||||
|
defer s.FilesLock.Unlock()
|
||||||
if !s.Running.CompareAndSwap(false, true) {
|
if !s.Running.CompareAndSwap(false, true) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
s.StopChan = make(chan bool)
|
s.LogChannel = make(chan logPayload, 10000)
|
||||||
|
s.StopChan = make(chan struct{})
|
||||||
go s.writerRunner()
|
go s.writerRunner()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -163,6 +166,9 @@ func (s *writerService) processLog(payload logPayload) {
|
|||||||
payload.writer.Log(payload.entry, payload.buf)
|
payload.writer.Log(payload.entry, payload.buf)
|
||||||
} else if payload.file != nil {
|
} else if payload.file != nil {
|
||||||
payload.file.Write(time.Now(), payload.buf)
|
payload.file.Write(time.Now(), payload.buf)
|
||||||
|
} else {
|
||||||
|
// 默认回退到控制台打印
|
||||||
|
fmt.Println(Viewable(string(payload.buf)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user