Files
ant-black 70132417ad publish: 1.2.0 snapshot (f3d7ec5)
channel: master

version: 1.2.0

source-ref: D:\code\open_source\ant-chrome master

source-commit: f3d7ec5

merged-public-base: 3d264eb
2026-05-05 18:08:10 +08:00

145 lines
3.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package logger
import "time"
// WrapFunc 包装无参数无返回值的函数
func (m *MethodInterceptor) WrapFunc(name string, fn func()) func() {
if !m.config.Enabled {
return fn
}
return func() {
ctx := m.beforeCall(name, nil)
defer m.afterCallRecover(ctx, nil, nil)
fn()
}
}
// WrapFuncWithError 包装返回 error 的函数
func (m *MethodInterceptor) WrapFuncWithError(name string, fn func() error) func() error {
if !m.config.Enabled {
return fn
}
return func() error {
ctx := m.beforeCall(name, nil)
var err error
defer func() {
m.afterCallRecover(ctx, nil, err)
}()
err = fn()
return err
}
}
// WrapFuncResult 包装有返回值的函数(使用 interface{}
func (m *MethodInterceptor) WrapFuncResult(name string, fn func() interface{}) func() interface{} {
if !m.config.Enabled {
return fn
}
return func() interface{} {
ctx := m.beforeCall(name, nil)
var result interface{}
defer func() {
m.afterCallRecover(ctx, result, nil)
}()
result = fn()
return result
}
}
// WrapFuncResultError 包装有返回值和 error 的函数
func (m *MethodInterceptor) WrapFuncResultError(name string, fn func() (interface{}, error)) func() (interface{}, error) {
if !m.config.Enabled {
return fn
}
return func() (interface{}, error) {
ctx := m.beforeCall(name, nil)
var result interface{}
var err error
defer func() {
m.afterCallRecover(ctx, result, err)
}()
result, err = fn()
return result, err
}
}
// WrapMethod1Arg 包装单参数方法
func (m *MethodInterceptor) WrapMethod1Arg(name string, fn func(interface{}) interface{}) func(interface{}) interface{} {
if !m.config.Enabled {
return fn
}
return func(p interface{}) interface{} {
ctx := m.beforeCall(name, []interface{}{p})
var result interface{}
defer func() {
m.afterCallRecover(ctx, result, nil)
}()
result = fn(p)
return result
}
}
// WrapMethod1ArgError 包装单参数返回 error 的方法
func (m *MethodInterceptor) WrapMethod1ArgError(name string, fn func(interface{}) (interface{}, error)) func(interface{}) (interface{}, error) {
if !m.config.Enabled {
return fn
}
return func(p interface{}) (interface{}, error) {
ctx := m.beforeCall(name, []interface{}{p})
var result interface{}
var err error
defer func() {
m.afterCallRecover(ctx, result, err)
}()
result, err = fn(p)
return result, err
}
}
// Intercept 通用拦截方法,用于手动记录方法调用
// 返回 CallContext 用于后续调用 Complete 或 Fail
func (m *MethodInterceptor) Intercept(methodName string, params ...interface{}) *CallContext {
if !m.config.Enabled {
return &CallContext{
RequestID: GenerateRequestID(),
MethodName: methodName,
StartTime: time.Now(),
Parameters: params,
}
}
return m.beforeCall(methodName, params)
}
// Complete 标记方法调用成功完成
func (m *MethodInterceptor) Complete(ctx *CallContext, result interface{}) {
if !m.config.Enabled {
return
}
m.afterCall(ctx, result, nil)
}
// Fail 标记方法调用失败
func (m *MethodInterceptor) Fail(ctx *CallContext, err error) {
if !m.config.Enabled {
return
}
m.afterCall(ctx, nil, err)
}