log:本该写入access文件的日志写到了error文件里
Go version
go version go1.23.3 windows/amd64
GoFrame version
2.9
Can this bug be reproduced with the latest release?
Option Yes
What did you do?
What did you see happen?
1.请求返回不带error,日志写入access.log文件 2.请求返回带error,日志写入error.log文件 3.请求返回不带error,日志也写入了error.log文件
What did you expect to see?
请求有error返回时才写入error.log文件
配置信息贴一下,是不是配置信息写错了呢?
# gf配置
server:
address: ":8000"
openapiPath: "/api.json"
# swaggerPath: "/swagger"
serverRoot: "resource/public"
DumpRouterMap: false
logPath: "/data/logs/your_service"
logStdout: true # 日志是否输出到终端。默认为true
ErrorStack: true # 当Server捕获到异常时是否记录堆栈信息到日志中。默认为true
ErrorLogEnabled: true # 是否记录异常日志信息到日志中。默认为true
errorLogPattern: "error-{Y-m-d}.log" # 异常错误日志文件格式。默认为"error-{Ymd}.log"
accessLogEnabled: true # 是否记录访问日志。默认为false
accessLogPattern: "access-{Y-m-d}.log" # 访问日志文件格式。默认为"access-{Ymd}.log"
serverAgent: "HTTP Server"
# PProf配置
pprofEnabled: true # 是否开启PProf性能调试特性。默认为false
pprofPattern: "/pprof" # 开启PProf时有效,表示PProf特性的页面访问路径,对当前Server绑定的所有域名有效。
# Global logging.
logger:
level: "all"
flags: 44 # 年-月-日 时:分:秒.毫秒 文件名:行号
path: "/data/logs/your_service" # 日志文件路径。默认为空,表示关闭,仅输出到终端
file: "{Y-m-d}.log" # 日志文件格式。默认为"{Y-m-d}.log"
stdout: true # 日志是否同时输出到终端。默认true
stdoutColorDisabled: true # 关闭终端的颜色打印。默认开启
writerColorEnable: false # 日志文件是否带上颜色。默认false,表示不带颜色
rotateExpire: "7d" # 日志保留天数
rotateBackupLimit: 2 # 最大备份数量
rotateBackupCompress: 9 # 日志文件压缩级别,0-9,9最高
请求返回不带error,日志也写入了error.log文件 有具体的代码吗 ?
比如其他逻辑代码里有错误出现呢?只是Controller中处理掉了呢?
这个到没注意,只是原本不应该写入error日志文件的日志写入了error日志文件
看着好像是公用这个的问题
http 记录的日志,可以看下源码的实现
看了 貌似用的同一个logger指针 然后再加上缓存get 导致后面的把前面的信息覆盖了。 流程如下: 1.access log 设置了logger 为access ,设置了access log缓存 2.error log 设置了logger为error,设置了error log 缓存 3.access log 直接使用了缓存,但是logger已经变为了error的设置
大佬???
看了 貌似用的同一个logger指针 然后再加上缓存get 导致后面的把前面的信息覆盖了。 流程如下: 1.access log 设置了logger 为access ,设置了access log缓存 2.error log 设置了logger为error,设置了error log 缓存 3.access log 直接使用了缓存,但是logger已经变为了error的设置
按照这个猜测验证一下,error.log 有日志,肯定是其中有地方出现了错误,才会被记录,因为有 traceid,可以看下日志模块的日志和error.log进行对比
@runsong2018 排查过后发现是logger的文件名发生了改变,并不是缓存替换了,这块的逻辑目前有bug, 可以使用代码验证
type HelloReq struct {
g.Meta `path:"/hello/{index}" tags:"Hello" method:"get" summary:"You first hello api"`
Index int `json:"index"`
}
func (c *ControllerV1) Hello(ctx context.Context, req *v1.HelloReq) (res *v1.HelloRes, err error) {
index := req.Index
arr := []int{10, 20, 30}
// index超过范围后会返回error
if index > len(arr) {
err = fmt.Errorf("index out of range: %d", index)
}
l := g.RequestFromCtx(ctx).Server.Logger()
fmt.Printf("index=%d err=%v, logger=%p\n", index, err != nil, l)
return
}
@gqcn 目前不太清楚这块的逻辑是只用一个logger完成不同文件的写入,还是access log用一个logger,error log用另一个logger