mirror of
https://github.com/black-ant/Ant-Browser.git
synced 2026-07-14 18:48:55 +08:00
channel: master
version: 1.2.0
source-ref: D:\code\open_source\ant-chrome master
source-commit: f3d7ec5
merged-public-base: 3d264eb
145 lines
3.1 KiB
Go
145 lines
3.1 KiB
Go
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)
|
||
}
|