100 lines
3.3 KiB
Go
100 lines
3.3 KiB
Go
package admin
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/goravel/framework/contracts/http"
|
|
|
|
apperrors "goravel/app/errors"
|
|
"goravel/app/http/response"
|
|
"goravel/app/utils/errorlog"
|
|
"goravel/app/utils/traceid"
|
|
)
|
|
|
|
type DebugController struct {
|
|
}
|
|
|
|
func NewDebugController() *DebugController {
|
|
return &DebugController{}
|
|
}
|
|
|
|
// TraceTest 手动触发不同级别的日志,方便校验 trace_id
|
|
// 支持 query 参数:
|
|
// - level: 日志级别 (error/warning/info/debug),默认 error
|
|
// - message: 自定义消息,默认 "manual trace log test"
|
|
// - trace_id: 自定义 trace_id(可选)
|
|
func (r *DebugController) TraceTest(ctx http.Context) http.Response {
|
|
traceID := traceid.EnsureHTTPContext(ctx, ctx.Request().Query("trace_id", ""))
|
|
message := ctx.Request().Query("message", "manual trace log test")
|
|
level := ctx.Request().Query("level", "error")
|
|
|
|
// 根据级别记录不同级别的日志
|
|
switch level {
|
|
case "warning":
|
|
errorlog.RecordHTTPWithLevel(ctx, "warning", "trace-test", "Trace test warning log", map[string]any{
|
|
"path": ctx.Request().Path(),
|
|
"method": ctx.Request().Method(),
|
|
"trace_id": traceID,
|
|
"message": message,
|
|
"level": "warning",
|
|
}, "Trace test warning: %s", message)
|
|
return response.Error(ctx, http.StatusBadRequest, apperrors.ErrTraceTestWarning.Code)
|
|
|
|
case "info":
|
|
errorlog.RecordHTTPWithLevel(ctx, "info", "trace-test", "Trace test info log", map[string]any{
|
|
"path": ctx.Request().Path(),
|
|
"method": ctx.Request().Method(),
|
|
"trace_id": traceID,
|
|
"message": message,
|
|
"level": "info",
|
|
}, "Trace test info: %s", message)
|
|
return response.Success(ctx, "trace_test_info", http.Json{
|
|
"message": message,
|
|
"level": "info",
|
|
"hint": "Check system logs with this trace_id to see info level log",
|
|
})
|
|
|
|
case "debug":
|
|
errorlog.RecordHTTPWithLevel(ctx, "debug", "trace-test", "Trace test debug log", map[string]any{
|
|
"path": ctx.Request().Path(),
|
|
"method": ctx.Request().Method(),
|
|
"trace_id": traceID,
|
|
"message": message,
|
|
"level": "debug",
|
|
}, "Trace test debug: %s", message)
|
|
return response.Success(ctx, "trace_test_debug", http.Json{
|
|
"message": message,
|
|
"level": "debug",
|
|
"hint": "Check system logs with this trace_id to see debug level log",
|
|
})
|
|
|
|
default: // error
|
|
errorlog.RecordHTTP(ctx, "trace-test", "Trace test error log", map[string]any{
|
|
"path": ctx.Request().Path(),
|
|
"method": ctx.Request().Method(),
|
|
"trace_id": traceID,
|
|
"message": message,
|
|
"level": "error",
|
|
}, "Trace test error: %s", message)
|
|
return response.Error(ctx, http.StatusInternalServerError, apperrors.ErrTraceTestError.Code)
|
|
}
|
|
|
|
}
|
|
|
|
// TestErrorLog 测试 ErrorWithLog 日志记录功能
|
|
// 用于手动触发异常,测试日志是否正常写入
|
|
func (r *MenuController) TestErrorLog(ctx http.Context) http.Response {
|
|
// 创建一个测试错误
|
|
testErr := fmt.Errorf("测试错误日志记录功能 - 这是一个手动触发的异常测试")
|
|
|
|
return response.ErrorWithLog(ctx, "menu-test", testErr)
|
|
|
|
// return response.ErrorWithLog(ctx, "menu-test", testErr, map[string]any{
|
|
// "test_type": "manual_test",
|
|
// "test_purpose": "验证 ErrorWithLog 是否能正确写入日志记录",
|
|
// "test_time": carbon.Now().ToDateTimeString(),
|
|
// "controller": "MenuController",
|
|
// "method": "TestErrorLog",
|
|
// })
|
|
}
|