publish v1.5.2
This commit is contained in:
parent
49a1ee715b
commit
19a691c5af
@ -1,5 +1,9 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.5.2] - 2026-06-04
|
||||||
|
- **稳定性修复: 异步引擎平滑退出**:
|
||||||
|
- **修复**: 重构 `writerService` 的通道生命周期管理。在 `Start` 时重新初始化 `LogChannel` 与 `StopChan`,并改用 `chan struct{}` 替代 `chan bool`,彻底解决了在 `starter` 多次启停或服务退出时引发的 `panic: close of closed channel` 致命错误。
|
||||||
|
|
||||||
## [1.5.1] - 2026-06-04
|
## [1.5.1] - 2026-06-04
|
||||||
- **缺陷修复: 异步控制台日志丢失**:
|
- **缺陷修复: 异步控制台日志丢失**:
|
||||||
- **修复**: 在 `writerService.processLog` 中补充了默认的回退逻辑。当处于异步 `starter` 运行模式下,且日志的 `writer` 和 `file` 都为 `nil`(即未配置特定的输出目标,本应输出到控制台)时,不再静默丢弃该日志,而是默认回退调用 `fmt.Println` 并在控制台打印渲染后的视图。
|
- **修复**: 在 `writerService.processLog` 中补充了默认的回退逻辑。当处于异步 `starter` 运行模式下,且日志的 `writer` 和 `file` 都为 `nil`(即未配置特定的输出目标,本应输出到控制台)时,不再静默丢弃该日志,而是默认回退调用 `fmt.Println` 并在控制台打印渲染后的视图。
|
||||||
|
|||||||
@ -13,6 +13,7 @@ func init() {
|
|||||||
var conf Config
|
var conf Config
|
||||||
_ = config.Load(&conf, "log")
|
_ = config.Load(&conf, "log")
|
||||||
DefaultLogger = NewLogger(conf)
|
DefaultLogger = NewLogger(conf)
|
||||||
|
DefaultLogger.RedirectStdLog()
|
||||||
}
|
}
|
||||||
|
|
||||||
// New 创建带有 traceId 的 Logger 副本
|
// New 创建带有 traceId 的 Logger 副本
|
||||||
|
|||||||
26
logger.go
26
logger.go
@ -2,6 +2,7 @@ package log
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
@ -11,6 +12,31 @@ import (
|
|||||||
"apigo.cc/go/id"
|
"apigo.cc/go/id"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// logRedirectWriter 捕获标准 log 包的输出并转发到 structured logger
|
||||||
|
type logRedirectWriter struct {
|
||||||
|
logger *Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *logRedirectWriter) Write(p []byte) (n int, err error) {
|
||||||
|
msg := strings.TrimSpace(string(p))
|
||||||
|
if msg != "" {
|
||||||
|
w.logger.Info(msg)
|
||||||
|
}
|
||||||
|
return len(p), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RedirectStdLog 将标准 log 包的输出重定向到当前 Logger。
|
||||||
|
// 注意:这会全局修改标准 log 包的配置。
|
||||||
|
func (logger *Logger) RedirectStdLog() {
|
||||||
|
log.SetOutput(&logRedirectWriter{logger: logger})
|
||||||
|
log.SetFlags(0) // 禁用标准 log 的时间前缀,由我们的 logger 统一处理
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStdLogOutput 仅设置输出目标而不修改 Flags
|
||||||
|
func SetStdLogOutput(w io.Writer) {
|
||||||
|
log.SetOutput(w)
|
||||||
|
}
|
||||||
|
|
||||||
type Logger struct {
|
type Logger struct {
|
||||||
config Config
|
config Config
|
||||||
level LevelType
|
level LevelType
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user